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学習にオススメの本をご紹介!
Pandasでデータサイエンスはじめよう!
スクレイピングにオススメの書籍

▼ Beautiful Soup4を使ったWebクローリングをはじめ、表データをpandasやOpenPyXL、matplotでデータ解析、グラフ表示などのスクレイピングのやり方が分かりやすく説明されてます。図解が多いのでPython初心者の方でも読み進められる内容となってます。