CentOS系でファイル名の文字を置換してファイル名を変換

CentOS系で文字列を置換して、ファイル名を変換する「rename」コマンドについて

CentOS系で、「test_01.txt」等のファイルが有り「test01.txt」の用に「_」を省略したいときがあります。「mv」コマンドでもできますがファイル名の変更には「rename」コマンドが使ってもできます

【書式】rename [置換前文字列] [変換後の文字] [対象のファイル名(複数も可)]

(例)「test_01.txt」の「_」を省略して「test01.txt」にしたい

$ rename _ ''  test_01.txt

また、ワイルドカード(*)を使って、複数のファイルも指定できます

(例)拡張子が「.txt」を「.bak」に変更したい

$ rename .txt .bak *.txt

Ubuntu系とCentOS系の「rename」コマンドの違い

また、Google等でrenameコマンドを検索すると、下記のような書式でのrenameコマンドの使用方法を見かけますが、下記の書式はUbuntu系でのrenameコマンドの使い方になります

【Ubuntu系 書式】 rename “s/置換前文字列/置換後文字列/;" 対象のファイル名

Ubuntu系では、renameコマンドはPerlスクリプトとして実装されています。置換文字列をダブルクォーテーション「"」またはシングルクォーテーション「’」で囲み、先頭に「s」を付けて間にスラッシュ「/」で挟む必要があります。

CentOS系では、renameコマンドは標準コマンドとして実装されています。そのため、置換文字列をそのまま指定できます。

【CentOS系 書式】 rename 置換前文字列 置換後文字列 対象のファイル名

# ubuntu系での使用例
$ rename "s/test/test_/;" test20240922.txt

# CentOS系だと以下になります
$ rename test test_ test20240922.txt