min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

bash で正規表現 for i in *jpg; do if [[ "$i" =~ ...__._ ]]; then echo "$i"; fi; done

仮にこんなファイル名の画像があるとして

f:id:min117:20200624222003p:plain

179__1_.jpg を

179__01_.jpgに

 

179__2_.jpg を

179__02_.jpgに

 

180__1_.jpg を

180__01_.jpgに

 

コマンド一発で(ワンライナーで)できるだろうか。

 

できる。bash正規表現を使えばいい。こうやる。まずは該当のファイルだけ捕まえる。

for i in *jpg; do if [[ "$i" =~ ...__._ ]]; then echo "$i"; fi; done

f:id:min117:20200624222328p:plain

ぐあっ。素晴らしい。

f:id:min117:20200624222436p:plain

 

変更後の名前と並べてみる。

$ for i in *jpg; do if [[ "$i" =~ ...__._ ]]; then echo "$i"; echo "$i" | sed -e s/"__"/"__0"/g; fi; done

f:id:min117:20200624223112p:plain

カンペキ。

f:id:min117:20200624223156p:plain

 

あとは変更後の名前にmvさせる。

f:id:min117:20200624223330p:plain

Linux最高。

f:id:min117:20200624223420p:plain

 

正規表現ダブルクオートしちゃうとダメなのは要注意。

f:id:min117:20200624223452p:plain

takuya-1st.hatenablog.jp

 

素晴らしい記事。

f:id:min117:20200624223638p:plain

あとで試す。