renameコマンドでファイル名を一括変更 macOS/Linux/Unix
macOSでは、ファイル名を一括変換したいときにFinderの機能を使って実現可能です。ですが私の場合、最近はFinderよりもターミナルを使うほうが何かと多く、ターミナルでのファイル名を一括で変更したいケースが出てきました。
そこで見つけたのが rename コマンドです。 rename コマンドは2種類あるようですので注意してください。ここではbrewでインストールする rename コマンドを解説していきます。
renameコマンドをインストール
brewを使って rename をmacOSへインストールします。
shell
$ brew install rename
renameコマンドの基本的な使い方
rename コマンドは、次のような形に正規表現でマッチさせ一括置換できます。shell
$ rename 's/マッチさせる文字/変換する文字/' ファイル群
テスト用のファイルを作成
いきなり本番で実行してしまうと致命的な損失になりかねないので、次のようなテストファイルを作成してテストを行なってください。
shell
$ touch hoge.txt fuga.txt
$ ls
fuga.txt hoge.txt
ファイル名に接頭辞を追加する
ファイル名に接頭辞(prefix)を追加する例です:
shell
$ rename 's/^/test_/' *.txt
$ ls
test_fuga.txt test_hoge.txt
ファイル名の接頭辞を削除する
ファイル名の接頭辞を削除する例です:
shell
$ rename 's/^test_//' *.txt
$ ls
fuga.txt hoge.txt
ファイル名に接尾辞を追加する
ファイル名に接尾辞 (suffix) を追加する例です:
shell
$ rename 's/.txt/_test.txt/' *.txt
$ ls
fuga_test.txt hoge_test.txt
マッチング演算子を使わずに考えると簡単です。
拡張子を一括変更する
拡張子を一括変更する例です:
shell
$ rename 's/.jpeg/.jpg/' *.jpeg
大文字を小文字に一括変更する
たとえば次のような大文字名のファイルがあったとします。
shell
$ ls
AU.csv BR.csv CA.csv CH.csv DE.csv
次のように書くと、一括変更が可能です。オプション-fは上書きを強制します。 大文字を小文字に一括変更する例です:
shell
$ rename -f 'y/A-Z/a-z/' *.csv
$ ls
au.csv br.csv ca.csv ch.csv de.csv
renameはperlの演算子を使用しているようで、s///はパターンマッチ・置換演算子、y///は変換演算子とのことです。大文字を小文字へ変換する場合、s///ではなくy///を使わないと変換できないのでご注意ください。
関連記事
アイデアノート > シェル・Python