Pythonでやってみよ。小技1のつづき
スケルトンライナーと作業手順書(メモ、コマンド履歴から作成)を1画面の左右に開いて作業するときの小技
シェルコマンド(zsh)でもファイルに書いておいてそれを1文(行)ずつ指定しながら、スケルトンライナープログラムとして実行できます。わたしの場合は、ターミナルでPythonやシェルコマンド(zsh)で作業をすることが多いので作業手順(実行順にワンライナーを記述したもの)をファイルとして保存して、作業のときに片側にvimで開き、もう1方でスケルトンライナーを実行しています。
その例をみてみましょう。 わたしが会計処理をするときに使用しているものです。「 eval $(cat ~/電子帳簿保存法対応業務フロー.txt|sed -ne'6p') 」をコピーして、もう1方のコマンドラインに貼り付け、エンターを押して実行します。その後は、上矢印キーで1つ前に戻って、「6p」の数字を目的のコマンドの行数に修正して実行していきます。毎回、prefix+oで画面を移動してコピー、prefix+oで画面を戻ってペーストするのも一苦労なんですよね。コマンドヒストリなら、上矢印キーとファイルから目的のコマンドの行を変えて実行するので、楽楽作業が進みます。
電子帳簿保存法対応業務フロー.txtの中身です。
#使い方vv
#bashで2022年1月施行電子帳簿保存法対応保存ファイル作成後ファイル名に作成日時、署名後インデックスファイルに追加保存してgit_commitする手順vv
#業務フローvv
@#ファイル作成日時追加#@
eval $(cat ~/電子帳簿保存法対応業務フロー.txt|sed -ne'6p') or for i in {6..7};do eval $(cat ~/電子帳簿保存法対応業務フロー.txt|sed -ne $i'p');done or rng=(1 2 4 {5..7} 9);for i in ${rng[@]};do eval $(cat ~/電子帳簿保存法対応業務フロー.txt|sed -ne $i'p');done
cd ~/scanfile/
sudo ntpq -p
f=($(ls -t1|grep -P '\.(pdf|eml|png|xlsx)'|grep -Pv '\.(pdf|eml|png|xlsx)\.asc'|tac|sed -ne'1,$p'));for ff in ${f};do echo ${ff};done
f=($(ls -t1|grep -P '\.(pdf|eml|png|xlsx)'|grep -Pv '\.(pdf|eml|png|xlsx)\.asc'|tac|sed -ne'1,$p'));for ff in ${f};do echo ${ff};done;for tgt in ${f};do echo ${tgt};tgti=$(ls -i "${tgt}"|cut -d' ' -f1);tgtfs=$(df -Th "${tgt}"|tail -1|awk '{print $1}');sudo debugfs -R 'stat <'"${tgti}"'>' "${tgtfs}" 2>/dev/null|grep -oP 'crtime.--\s\K.'|xargs -I{} date -d {} +'%Y%m%d%H%M%S'|xargs -I@ echo mv -vi "\'""${tgt}""\'" "\'""${tgt%.}"@\."${tgt##.}""\'"|xargs -I{} bash -c "{}";sleep 5;done
@#ファイルに署名追加#@
f=($(ls -t1|grep -P '\.(pdf|eml|png|xlsx)'|grep -Pv '\.(pdf|eml|png|xlsx)\.asc'|tac|sed -ne'1,$p'));for ff in ${f};do echo ${ff};done;for tgt in ${f};do gpg -u kiwi_bi@bi --detach-sign -a ${tgt};sleep 1;done
f=($(ls -t1|grep -P '\.(pdf|eml|png|xlsx)'|grep -Pv '\.(pdf|eml|png|xlsx)\.asc'|tac|sed -ne'1,$p'));for ff in ${f};do echo ${ff};done
#---------------------------------
修正(6月、社会保険料支払いの資料がpdfではなくpngイメージファイルで保存し、保存登録がもれてしまったため、ファイル形式にpngを追加した) 2022-07-26 10:32:10
#---------------------------------
@#タイムサーバー日時記録追加#@
cdrecipt
ntf='ntp_timeserver_now.txt';date +'%Y-%m-%d %H:%M:%S.%N %z'|cut -b 1-26,30- > $ntf;nt=$(pn -c "import ntplib;import datetime;c=ntplib.NTPClient();response=c.request('ntp.jst.mfeed.ad.jp',version=4);print(datetime.datetime.fromtimestamp(response.tx_time).astimezone().strftime('%Y-%m-%d %H:%M:%S.%f %z'))");echo $nt >> $ntf;sudo ntpq -p >> $ntf;ntptime >> $ntf;echo '' >> $ntf;cat $ntf >> ntp_timeserver_log.txt
web上でNICT_情報通信研究機構とPCの時刻とのズレを確認する(https://www.nict.go.jp/JST/JST5.html)
@#インデックスファイルに追加#@
cdscanf
for ff in ${f};do echo ${ff};done
ls -t1|xargs -I{} mv -vi {} ~/recipt
cdrecipt
for ff in ${f};do echo ${ff};done
for ff in ${f};do fe='index_for_add_電子帳簿.tsv';: > ${fe_};mtime=$(stat ${ff}|sed -ne'/Modify: /p'|sed -e's/Modify: //;s/ //g;s/\..*\?+0900/JST/');btime=$(tgt=${ff};tgti=$(ls -i "${tgt}"|cut -d' ' -f1);tgtfs=$(df -Th "${tgt}"|tail -1|awk '{print $1}');sudo debugfs -R 'stat <'"${tgti}"'>' "${tgtfs}" 2>/dev/null|grep -oP 'crtime.--\s\K.'|xargs -I{} date -d {} +'%Y-%m-%d_%H:%M:%S%Z');python -c "import pathlib,re,datetime,hashlib,ntplib;c=ntplib.NTPClient();response=c.request('ntp1.jst.mfeed.ad.jp',version=4);ntptm=datetime.datetime.fromtimestamp(response.tx_time).astimezone().strftime('%Y-%m-%d_%H:%M:%S%Z');fn=pathlib.Path('${ff}');f_add=f"\""{fn.name}\t{hashlib.sha256(fn.read_bytes()).hexdigest()}\t${btime}\t${mtime}\t{datetime.datetime.fromtimestamp(fn.stat().st_mtime).astimezone().strftime('%Y-%m-%d_%H:%M:%S%Z')}\t{datetime.datetime.now().astimezone().strftime('%Y-%m-%d_%H:%M:%S%Z')}\t{ntptm}"\"";pathlib.Path('index_for_add_電子帳簿.tmp').write_text(f_add);f_=open('index_for_add_電子帳簿.tsv','a');f_.write(f_add+'\n');f_.close()";sleep 5;cat ${fe_} >> index_電子帳簿.tsv;done
@#git_commitして保存完了#@
#cdrecipt
git status
git log -2 --shortstat
"""
add files
ファイルを保存
ファイルに署名
ファイル一覧に追加
"""
git add .
git commit
git status
git log -2 --name-status
git push origin master
cd ~/recipt_save
--- 2022-03-25 16:19:20 +0900 ---
#使い方vv
#bashで2022年1月施行電子帳簿保存法対応保存ファイル作成後ファイル名に作成日時、署名後インデックスファイルに追加保存してgit_commitする手順vv
#bashで2022年1月施行電子帳簿保存法対応ファイル保存後、MariaDBにバックアップする手順vv
#業務フローvv
@#ファイル追加#@
cdpn
pythonファイルを開く
vim db_ist.py
44行目を確認、追加する行番号を修正([1:-1],1)] -> [274:-1],274]]のように)
val_=[(i,)+tuple(x[:]+[(pathlib.Path('~/recipt').expanduser()/x[0]).read_bytes(),(pathlib.Path('~/recipt').expanduser()/(x[0]+'.asc')).read_bytes()])+('new register',) for i,x in enumerate([x.split('\t') for x in tyoubo.split('\n')][274:-1],274)]
pythonを開く
db_ist.pyの44行目までを実行する(fn_='電子帳簿保存法対応業務フロー.txt';fn=fr(fn_);exec(''.join([x for x in fn][61-1])))
fn_='db_ist.py';fn=fr(fn_);exec(''.join([x for x in fn][:45]))
バックアップする内容を確認する
pp([x[0:-3]+(x[-1],) for x in val_])
確認してOKなら、プログラムを実行して完了
fn_='db_ist.py';fn=fr(fn_);exec(''.join([x for x in fn][:]))
Mariadbを開いてバックアップされたかどうか確認する
MariaDB [dt]> show columns from recipt_lists;
MariaDB [dt]> select list_id,file_id,file_name,kousinnitiji_py,created_at,updated_at,row_start,row_end from recipt_lists where list_id regexp '0000000001';
MariaDB [dt]> select list_id,file_id,file_name,sakuseinitiji_zsh,kousinnitiji_py,timeserver_ntp,tourokunitiji,category,row_start from recipt_lists where file_id=349;
#--- 2022-03-25 16:19:20 +0900 ---
追加(Mariadbにバックアップする手順を追加)
--- 2022-06-16 09:38:19 +0900 ---
