renameコマンドでファイル名を一括変更する方法|正規表現・連番・拡張子変更の実践例

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, ファイル・ディレクトリ管理コマンド > renameコマンドでファイル名を一括変更する方法|正規表現・連番・拡張子変更の実践例
「大量のファイルの拡張子をまとめて変えたいのに、mvでは1つずつしか変えられない」
こんな場面で手が止まってしまった経験はありませんか。100個のファイル名を1つずつ打ち直すのは現実的ではありません。

この記事では、ファイル名を一括変更できる rename コマンドの実践的な使い方を解説します。基本的な置換から、正規表現を使った複雑なリネーム、連番付与、拡張子の一括変更、そして実行前の安全確認まで、現場でそのまま使えるパターンを網羅します。

この記事のポイント

・rename には Perl版とutil-linux版の2系統があり書式が違う
・rename -n で実行前に変更内容を必ずプレビューできる
・rename 's/旧/新/' *.txt で正規表現による一括置換ができる
・拡張子変更・小文字化・連番付与も1コマンドで完結する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜ rename コマンドが必要なのか?(mvとの違い)

ファイル名を変えるなら mv コマンドを思い浮かべる方が多いはずです。確かに mv はファイル名の変更にも使えますが、扱えるのは「1ファイルずつ」が基本です。

たとえば「拡張子 .txt のファイルをすべて .bak にしたい」という場合、mv だけで実現しようとするとシェルのforループを組む必要があり、ひと手間かかります。

そこで活躍するのが rename コマンドです。rename はファイル名に対して「置換ルール」をまとめて適用できるため、複数ファイルのリネームを1行で完結できます。

複数ファイルの一覧確認には ls コマンドを併用すると、変更前後の状態を把握しやすくなります。ls コマンドの基本オプションもあわせて確認しておくと、リネーム作業がぐっと楽になります。

【重要】rename には2つの系統がある

最初に必ず押さえておきたい落とし穴があります。rename コマンドには互換性のない2系統が存在します。

Perl版(prename / file-rename):Debian・Ubuntu系で標準。Perlの正規表現 s/// を使う高機能タイプ
util-linux版:RHEL・Rocky Linux・AlmaLinux系で標準。rename 旧文字列 新文字列 ファイル という単純置換タイプ

同じ rename という名前でも、ディストリビューションによって書式がまったく異なります。まずは自分の環境がどちらかを確認しましょう。

# 実行環境: Rocky Linux 9.4 / Ubuntu 24.04 LTS で動作確認済み # どちらの版か確認する $ rename --version /usr/bin/rename from util-linux 2.37.4 # Ubuntu系では次のように表示される $ rename --version /usr/bin/rename using File::Rename version 2.01

「from util-linux」と表示されたらutil-linux版、「File::Rename」と表示されたらPerl版です。本記事ではより柔軟なPerl版を中心に解説し、util-linux版の書き方も併記します。

rename コマンドの基本的な使い方(Perl版)

Perl版 rename の書式はシンプルです。Perlの置換構文 s/置換前/置換後/ を第1引数に渡し、続けて対象ファイルを指定します。

1. 書式を理解する

# 基本書式 # rename 's/置換前/置換後/' 対象ファイル... # 末尾が .txt のファイルを .bak に変更する $ ls data1.txt data2.txt data3.txt $ rename 's/\.txt$/.bak/' *.txt $ ls data1.bak data2.bak data3.bak

正規表現の \.txt$ は「末尾の .txt」を意味します。ドットは正規表現で任意の1文字を表すため、文字としてのドットを指定するには \. とエスケープする点に注意してください。

2. rename -n で実行前にプレビューする

rename は一括でファイル名を書き換えるため、ルールを間違えると大量のファイルが意図しない名前になってしまいます。これを防ぐ最も重要なオプションが -n(または --no-act)です。

-n を付けると、実際には変更せず「どう変わるか」だけを表示します。本番実行の前に必ず -n でプレビューする習慣をつけましょう。

# -n で変更内容をプレビュー(実際には変更しない) $ rename -n 's/\.txt$/.bak/' *.txt rename(data1.txt, data1.bak) rename(data2.txt, data2.bak) rename(data3.txt, data3.bak) # 内容を確認してから -v(詳細表示)付きで本番実行 $ rename -v 's/\.txt$/.bak/' *.txt data1.txt renamed as data1.bak data2.txt renamed as data2.bak data3.txt renamed as data3.bak

「rename(変更前, 変更後)」の形で出力されるので、想定どおりか一目で確認できます。

3. ファイル名の一部だけを置換する

拡張子だけでなく、ファイル名の途中にある文字列も置換できます。たとえば「img_」というプレフィックスを「photo_」に変えたい場合は次のようにします。

$ ls img_001.jpg img_002.jpg img_003.jpg # img_ を photo_ に置換 $ rename -n 's/img_/photo_/' *.jpg rename(img_001.jpg, photo_001.jpg) rename(img_002.jpg, photo_002.jpg) rename(img_003.jpg, photo_003.jpg)

応用・実務Tips(正規表現・連番・拡張子変更)

ここからは現場でよく使う応用パターンを紹介します。Perl版の正規表現を活かすことで、複雑なリネームも1行で処理できます。

1. ファイル名を小文字・大文字に統一する

Windowsからコピーしたファイル名に大文字が混在していると、Linuxでの扱いが煩雑になります。Perlの修飾子 e(置換結果を式として評価)と関数 lc・uc を組み合わせると、一括で大文字小文字を変換できます。

$ ls README.TXT Report.DOC Sample.JPG # すべて小文字に変換する $ rename -n 'y/A-Z/a-z/' * rename(README.TXT, readme.txt) rename(Report.DOC, report.doc) rename(Sample.JPG, sample.jpg) # 拡張子だけを小文字にしたい場合(後半部分だけ変換) $ rename -n 's/(\.[^.]+)$/lc($1)/e' * rename(README.TXT, README.txt)

y/A-Z/a-z/ はPerlの文字変換(transliteration)で、tr コマンドと同じ発想です。テキスト処理全般での変換ロジックは、tr の考え方とも共通しています。Linux 基本コマンドの解説でテキスト操作の基礎を押さえておくと理解が早まります。

2. 連番をゼロ埋めで揃える

「file1.txt」「file10.txt」のように桁数がバラバラだと、ソート順が崩れます。sprintf を使ってゼロ埋め(zero padding)した連番に整えましょう。

$ ls file1.txt file2.txt file10.txt # 数字部分を3桁ゼロ埋めにする $ rename -n 's/(\d+)/sprintf("%03d", $1)/e' *.txt rename(file1.txt, file001.txt) rename(file2.txt, file002.txt) rename(file10.txt, file010.txt)

(\d+) でキャプチャした数字を sprintf("%03d", $1) で3桁に整形しています。これでファイル名順とファイル番号順が一致し、ls の表示もきれいに揃います。

3. ファイル名の先頭・末尾に文字を追加する

日付プレフィックスを付けてバックアップ用に揃えたい、といったケースです。

# 先頭に日付プレフィックスを付ける $ rename -n 's/^/20260606_/' *.log rename(access.log, 20260606_access.log) rename(error.log, 20260606_error.log) # 拡張子の前に _old を挿入する $ rename -n 's/(\.\w+)$/_old$1/' *.conf rename(httpd.conf, httpd_old.conf)

^ は行頭、$ は行末を表すアンカーです。これを使い分けることで、追加位置を自在にコントロールできます。

こうしてリネームしたバックアップファイルは、tar でまとめてアーカイブしておくと管理しやすくなります。tar コマンドの実用例も参考にしてください。

4. util-linux版(RHEL系)での書き方

RHEL・Rocky Linux・AlmaLinux系で標準のutil-linux版は正規表現が使えず、単純な文字列置換のみです。書式が異なるので注意しましょう。

# util-linux版の書式 # rename 置換前 置換後 対象ファイル... $ ls data1.txt data2.txt data3.txt # .txt を .bak に置換する $ rename .txt .bak *.txt $ ls data1.bak data2.bak data3.bak # Perl版を入れたい場合(dnf) $ sudo dnf install prename

util-linux版は最初にマッチした文字列1か所だけを置換します。柔軟なリネームが必要な場合は、prename パッケージでPerl版を導入するのがおすすめです。

「rename: not enough arguments」が出た時の対処法

rename を実行したときに遭遇しやすいエラーと、その原因を整理します。

1. not enough arguments エラー

$ rename 's/.txt/.bak/' rename: not enough arguments Try 'rename --help' for more information.

対象ファイルを指定していないか、ワイルドカード(*.txt)にマッチするファイルが存在しない場合に発生します。まず ls でファイルの有無を確認しましょう。

2. 置換ルールが効かない・想定外の名前になる

正規表現のドットをエスケープし忘れると、意図しない箇所が置換されます。

たとえば s/.txt/.bak/ は「任意の1文字+txt」にマッチするため、mytxt.txtmy.bak.txt になってしまうことがあります。拡張子を確実に指定するには s/\.txt$/.bak/ のように \. と末尾アンカー $ を使ってください。

こうした事故を防ぐためにも、本番前の rename -n によるプレビューは省略しないでください。

3. ファイル名が重複して上書きされる

リネーム結果が既存ファイルと同名になると、デフォルトでは上書きされてしまいます。Perl版なら -o を付けない限り上書きを抑止するオプションはバージョン依存のため、-n でプレビューして重複が出ないかを必ず確認するのが安全です。

本記事のまとめ

rename コマンドは、複数ファイルのリネームを1行で完結できる強力なツールです。Perl版とutil-linux版で書式が違う点と、本番前に -n でプレビューする習慣を押さえれば、現場の面倒なリネーム作業が一気に効率化します。
やりたいこと コマンド
どちらの版か確認する rename --version
実行前にプレビューする rename -n 's/\.txt$/.bak/' *.txt
拡張子を一括変更する(Perl版) rename 's/\.txt$/.bak/' *.txt
拡張子を一括変更する(util-linux版) rename .txt .bak *.txt
ファイル名を小文字に統一する rename 'y/A-Z/a-z/' *
連番を3桁ゼロ埋めにする rename 's/(\d+)/sprintf("%03d",$1)/e' *.txt
先頭にプレフィックスを付ける rename 's/^/20260606_/' *.log

現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Linuxサーバー構築入門マニュアル(図解60P)を無料でお渡ししています。

>> Linuxサーバー構築入門マニュアル(図解60P)を無料で受け取る

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。