複数のファイルの名前をまとめて変更する

カレントディレクトリにあるファイルの名前を、
たとえば、*.html を *.htm と名前を変更するという課題に対し
どのぐらいエレガントに書けるかというのを比較してみる。

複数のファイルの名前をまとめて変更する - 技術メモ帳

僕が書くと

for file in *.html
do
    mv ${file%%.html}.{html,htm}
done

ですかね。レビューで「拡張子をhtmlからhtmに変更する」というコメントが入ってなかったらもっとシンプルなのに書き直してもらいますよね。

/bin/ls *.html | sed 's/\(.*\).html/mv & \1.htm/' | sh

まわりくどいかな…
sed正規表現が使える (特にパターンが複雑な場合) のと,sh に食わせなければ (最後の "| sh" をつけなければ) これから実行される処理が確認できるのと...

Peace Pipe: 複数のファイルの名前をまとめて変更する [memo]

考え方がとてもステキだと思いました。本番環境でrmコマンドに*や?を使う場合はrmの代わりにlsで対象ファイル名を確認するということを隣のチームの人に教わってからそうするようになりました。