rename? prename? ファイル名を一括変更したい!

古都の老兵
2022-11-22
2022-11-22

はじめに

サーバー運用をしていると一括してファイル名を変更したい事が多々あります。
例えば一括してバックアップファイルを取っておきたい、その時のファイル名に日付を入れておきたい、等々。

そういう場合にrenameコマンドを使うのだけど、Debian 系とRedHat系では振る舞いが違うようだ。Debian系と同じ振る舞いをさせたい場合は、RedHat系はprename を使いましょう。

prenameは標準ではインストールされていない場合が多いので入っていない場合はインストールが必要になります。


man ページで、`renames multiple files` という説明になっている方がDebian系のrenameコマンドです。

使い方

RedHat系標準のrenameは、

 rename (変換対象の文字列) (変換したい文字列) 対象のファイル

となる。例えば、HTMLファイルの拡張子として *.html と *.htm と混在しているのを統一したいような場合は、

rename .htm .html *.htm

これで拡張子が .htm だったファイルは全て .html になります。

次にDebian系のrenameの場合、コマンドの引数は正規表現を使います。

 rename 's/(変換対象文字列)/(変換したい文字列)/' 対象のファイル・・・

正規表現が使える為、非常に応用範囲が広く正規表現を理解できる人にとっては使い勝手が良い。
例えば全てのファイルの最後に日付を入れたいような場合だと

rename 's/$/20YYMMDD/' *

正規表現的に$は行末を表すので、最後に20YYMMDDが付く事になる。

最後に

対象ファイルもワイルドカードが使えるので、対象を絞る事もでき、RedHat系より使いやすいだろう。RedHat系にはprenameをインストールしておくことをお勧めします。