一括でファイル名を正規表現(PCRE)で変更したい
以前はこのRename(Perl/CPAN)が標準だった気がするのですが、現在のディストリビューションはGNUユーティリティがデフォルトではいっているケースが増えたような気がします。ですから、以下の記述はあくまでPerlで作られたRenameコマンドです。導入しないと使えません。
その答えがrenameコマンドです。
シェルの達人は、mv使うとか、for で処理するとか。それはおいておきましょう。いまどきエレガントと言えるかどうかは別として。議論はしません。
- ファイル名置換には正規表現が使いたい。
- エレガントに処理したい。(=楽したい)
その答えがrenameコマンドです。
シェルの達人は、mv使うとか、for で処理するとか。それはおいておきましょう。いまどきエレガントと言えるかどうかは別として。議論はしません。
さて、abc.txt AAAabc.txt があったとして、
$ rename "s/abc/あいう/" *.txt
とすれば、2つのファイル名abc部分があいうに置換されます。
肝は、「強力なperlの正規表現」が使えるということです。これは美味しいです。覚えておいて損はありません。
使いこなしのためにというよりむしろ泣かないために:
rename -v で成功結果を表示
rename -n では実際には置換しない。失敗しないためにはこれを覚えておきましょう。
-fでは同一名称でも強制的に既存ファイルを上書きします。
man rename でも確認できます。実態は、perlのスクリプト。
たとえば
[20150106]全角半角ESC入れ替える(0105 Ver.).desktop3
というファイルがありました。
$ rename -n "s/\[.*?\]//" *.desk*3
[20150106]全角半角ESC入れ替える(0105 Ver.).desktop3 renamed as 全角半角ESC入れ替える(0105 Ver.).desktop3
というように、ファイル頭の[2015うにゃ]が削除されていることがわかると思います。
renamed as ESC全角半角入れ替える(0105 Ver.).desktop3
となりますね。
というふうに、perlの基礎で対応できますから、便利です。
シェルはzshを使っています。bashとたまに動きが違います。
CPAN File-Rename