[Shell] bash: ファイル名を一括で変更する
Terminal.app上でシェルスクリプト。
ファイル名の一部を一括変換する
こちらの下の方の回答。
menu を globalnav に変更したい。
% ls
menu-1-on.png menu-2.png menu-4-on.png menu-5.png menu-7-on.png
menu-1.png menu-3-on.png menu-4.png menu-6-on.png menu-7.png
menu-2-on.png menu-3.png menu-5-on.png menu-6.png menu-8.png
こんな形式。
backtick で囲んで、ls コマンドの出力を利用しているところがかっこいい。
% for f in `ls`; do mv $f ${f/menu/globalnav}; done
結果はこんな感じ。
% ls
globalnav-1-on.png globalnav-3-on.png globalnav-5-on.png globalnav-7-on.png
globalnav-1.png globalnav-3.png globalnav-5.png globalnav-7.png
globalnav-2-on.png globalnav-4-on.png globalnav-6-on.png globalnav-8.png
globalnav-2.png globalnav-4.png globalnav-6.png
こんな書き方もある。
-on を _hover に変更する。
% for file in *-on.png ; do mv "$file" "${file%-on.png}_hover.png" ; done
上記は、一致するパターンを置換している。
ファイル名の一部を削除する
globalnav を削除したい。
% for file in `ls` ; do mv "$file" "${file#globalnav-}" ; done
結果。
% ls
1.png 2_hover.png 4.png 5_hover.png 7.png
1_hover.png 3.png 4_hover.png 6.png 7_hover.png
2.png 3_hover.png 5.png 6_hover.png 8.png