【記録】ファイルを複製し、日付部分を変更する【macOS Automator シェルスクリプト】

経費精算のエクセルファイルを複製し、

ファイル名の日付部分を変更(2週間ずらす)

という単純作業にわりとストレスを感じていたので、自動化

 

 

困っていたこと

経費精算のエクセルファイルを複製し、

ファイル名を変更(日付を2週間ずらす)、

という単純作業なんだけど、

月をまたぐと2週間後って暗算できないじゃないですか。

いちいちカレンダーを調べるのにイラッとしていて

何とかしたいと長らく願っていた。

 

やったこと

 

全体像

f:id:masatora_bd5:20200224224842p:plain

 

シェルスクリプト部分 
for f in "$@"
do

#dt1を取得
	dt1=${f##*経費精算}
	dt1="${dt1%.*}"

#dt2をセット(dt1に対して2wk後日付)
	dt2=$(date -v+2w -j -f "%y%m%d" "$dt1" "+%y%m%d")

#cp
	cp $f ${f/"$dt1"/"$dt2"}

done

たとえば

経費精算200222.xlsx に対してクイックアクションを行うと

経費精算200307.xlsx が生成される

 

覚え書き(スクリプトとかその他)

  • シェルスクリプトの入力の引き渡しは「引数として」
  • dt1は、元ファイルの日付部分だけ抽出
  • 日付はyyddmmであることが前提
  • dt2は、2週間後の日付
  • macOSBSD系なので、date -dやdate --dateが使えない。date -v。これがわからずに意外と苦労した
  • cpはわりとオーソドックスに置換

 

参考リンク

bashの変数展開によるファイル名や拡張子の取得 - Qiita

Automatorにおけるスクリプトの入出力 - Qiita

bashでパラメータ展開を用いて変数を利用する | 俺的備忘録 〜なんかいろいろ〜

shとbashでの変数内の文字列置換など - ろば電子が詰まつてゐる

Mac の bash で date を使って先月の今日の日付を取ろうとしたらハマった | ウェブル

dateコマンドの使い方: UNIX/Linuxの部屋

 

細かい補足をしてQiitaにあげたいと思いつつ

ざっくり記して果てる(パタン……)

 

環境

MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)

macOS Catalina 10.15.3

Automator バージョン2.10 (492)