Matthewの備忘録

忘れたときはここを見ろ。何か書いてある。

ファイル名の置換

 コンピューターに触って四半世紀以上過ぎたが、ファイル名の置換は何度となく行ってきた。大量に行いたい度にやり方を考えたり、解説サイト探してきた。今回も検索して、最も簡単な方法にたどり着いた。これまでsedなどを利用してbashワンライナーなどを書いてきたが、条件を限るともっと効率的に書けることが分かった。

renameを使おう

 Windowsに接続しているHDDのあるフォルダの中に大量のファイルが収められていた。先頭からあるていどの桁数で数字が続き、'-'がきて、それ以降は適当なファイル名がつけられていた。例えば1234567890-hoge.hogaのようなファイル名であった。これを'-'以前を削除してhoge.hogaにしたかった。
 VirtualBoxなどの仮想OSが動かせたので、HDDを共有し、bashワンライナーでも書いて置換してやればよいと思ったが、もっと効率がよい方法があるのではないかと思い、検索したところ、renameコマンドを見つけた。知っていたが、実は使ったことがなかった。UNIX標準でもなく、Linuxディストロにはとりあえず入っているかもしれない程度のコマンドであったので利用を控えてきたのだった。うれしいことにperlで実装されているからなのか、標準的な正規表現が使える。
 実際には次のように利用した。次のファイル群があるとして、

1234434-hoge1.huga
2343423-hega3.huga
5084334-hoge3.huga
...

次のコマンドで先頭の数字列を取り去ることができる。

$ rename s/^[0-9]*-// *.huga

数百個程度のファイルならそんなに遅く感じないだろう。