複数のファイルの名前をまとめて変更する
カレントディレクトリにあるファイルの名前を、
複数のファイルの名前をまとめて変更する - 技術メモ帳
たとえば、*.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
まわりくどいかな…
Peace Pipe: 複数のファイルの名前をまとめて変更する [memo]
sed の正規表現が使える (特にパターンが複雑な場合) のと,sh に食わせなければ (最後の "| sh" をつけなければ) これから実行される処理が確認できるのと...
考え方がとてもステキだと思いました。本番環境でrmコマンドに*や?を使う場合はrmの代わりにlsで対象ファイル名を確認するということを隣のチームの人に教わってからそうするようになりました。