zmvを使ってファイルのリネームとかを簡単に行う

shellを使ってファイルの一括リネームなどを行う際には一般的に

for f in *.html;
do
mv $f $.htmf;
done

こんな感じ


なのだが、これだとどうも面倒な感じ。
連番なんかと付けようとする場合にはもっと面倒。
なので、なんか便利なものはないかと探した。


Linuxには”rename"というコマンドがあるらしく、これが超絶簡単便利そうなものだったのだが、"UNIX"にはないらしい。
そして、Macにもこの"rename"コマンドは入っていなかった。


MacPortsなんかを探したけれども見つからず。諦めて、まともに書いた事がないShellScriptでも書いてみようと思ってたところ見つけたのがzshの"zmv"コマンド


詳細は
複数のファイルの名前をまとめて変更する - 技術メモ帳
http://d.hatena.ne.jp/lurker/20061120/1163981280
を見てもらうと良いのだが、かなーり簡単にファイルのリネームが行える。

リンク先にもあるように、たとえば、拡張子htmlをhtmに変えたい場合などこれだけでOK

zmv -W '*.html' '*.htm'

-Wを付けることで、* による、シェルっぽい一括指定が簡単にできてしまう。
-W無しでもこの程度

  zmv '(*).html' '\$1.htm'

まぁ、大体どんなツール使っても正規表現は似たようなものですね。$の前に\付けることくらい。


ちなみにこの"zmv" 、autoloadをしてやらないと動かないみたい。
また、noglobを指定することで、鬱陶しいシングルクオートも不要になります。
なので、zshrcに以下を記述しておくと良いです。

autoload zmv
alias zmv='noglob zmv'