[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