2015年2月26日木曜日

ubuntu/mint rename コマンドは、perlなので超便利。初心者こそ試してみるべき。

以前はこのRename(Perl/CPAN)だったのですが、現在のディストリビューションはGNUユーティリティがデフォルトではいっているケースが増えたような気がします。ですから、以下の記述はあくまでPerlで作られたRenameコマンドです。

一括でファイル名を変更したい。
置換には正規表現が使いたい。
エレガントに処理したい。(=楽したい)

その答えが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うにゃ]が削除されていることがわかると思います。

rename -n 's/(\[.*?\])(.*?)(ESC)(.*?)/$3$2/' *.desk*3
renamed as ESC全角半角入れ替える(0105 Ver.).desktop3
となりますね。

というふうに、perlの基礎で対応できますから、便利です。

シェルはzshを使っています。bashとたまに動きが違います。

0 件のコメント:

コメントを投稿