rename コマンド入門 - 複数ファイルを一括リネームする
この記事でできるようになること
- `rename -n` で変更の予定を先に確認してから本実行できる
- `s/古い/新しい/` で拡張子や文字列を一括で置き換えられる
- Perl 版と util-linux 版を `rename --version` で見分け、書き方を切り替えられる
前提知識(先に読むと理解しやすい記事)
この記事で学べること
renameで 複数ファイルの名前を一気に変える 方法が分かります- 実行前に
-nで 「何が起きるか」を必ず確認 する安全な型が身につきます s/古い/新しい/の 置換パターン で拡張子や文字列を一括変換できます- 名前が似ている 2 種類の rename(Perl 版と util-linux 版)の違い を見分けられます
言葉の整理
- リネーム:ファイルの名前を変えることです。「名前の変更」と同じ意味です。
- 拡張子:ファイル名の末尾にある
.jpgや.txtの部分です。 - パターン:「こういう形の文字を探す」という書き方のことです。この記事では
s/古い/新しい/の形を使います。 - dry-run(ドライラン):実際には実行せず、予定だけを表示することです。この記事では
-nがそれにあたります。 - クォート文字列を引用符(' や ")で囲むこと。スペースなどを含む値をひとまとまりとして扱える。:
'で文字列を囲むことです。囲むと、記号がそのままの文字として渡ります。 - カレントディレクトリ:いま自分がいるディレクトリファイルをまとめて整理する入れ物。Windows や macOS の「フォルダ」と同じもの。のことです。「現在地」と読み替えて構いません。
rename はファイルの名前を書きかえるコマンドです。だからこそ、最初に -n を覚えます。-n を付けている間は 1 個も変わりません。
結論(先に覚えるべき型)
- まず確認 →
rename -n 's/古い/新しい/' *(実行せず予定だけ表示) - 問題なければ実行 →
rename 's/古い/新しい/' * - 大文字を小文字に →
rename 'y/A-Z/a-z/' * - どっちの rename か迷ったら →
rename --versionで確認
前提(対象環境)
- OS:Ubuntu / Debian です。既定の
renameは Perl 版 です - 他のディストリビューション(Fedora 等)では util-linux 版 のことがあります。書き方が違います(第 6 章で解説します)
安全に試すための 3 つの型
rename を間違えると、複数のファイル名が一度に変わります。元の名前は自動では戻りません。次の 3 つを守れば安全に練習できます。
- 練習用のディレクトリを作り、その中だけで試す(例:
mkdir -p ~/rename-practice && cd ~/rename-practice) touchで作った空ファイルなど、消えて困らないファイルで試す- 本実行の前に必ず
-nを付けて、変更の予定を目で確かめる
なお rename は本サイトの仮想ターミナル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。には入っていません。実機の Linux か WSL で試してください。だからこそ、上の 3 つを守ってください。
1. rename コマンドとは何か?
結論:
renameは複数ファイルの名前を、パターンを使って一括で変換するコマンド。1個ずつmvする手間を消せる。
photo1.jpeg や photo2.jpeg のようなファイルが 50 個あります。全部の拡張子を .jpg に直したいです。mv で 1 個ずつ直すしかないですか?rename なんだ。mv は「1 個の名前を変える道具」だね。rename は「たくさんの名前を一括で変える道具」だよ。mv を打たなくていいんですか?.jpeg の部分だけを .jpg に置き換えるような パターン指定 ができる。これが強みなんだ。rename の基本イメージ
rename 's/jpeg/jpg/' *.jpeg
↑ ↑
| 対象ファイル(ここでは .jpeg 全部)
変換ルール(jpeg を jpg に置き換える)やっていることは 1 つです。「ファイル名の中の jpeg を見つけて jpg に書きかえる」だけです。これを対象ファイル全部に対して一気に行います。
2. なぜ rename を使うのか?
結論:
mvは1個ずつの変更には向くが、数十個を同じルールで変えるには非効率。rename ならパターンを1回書くだけで済む。
mv でも名前は変えられますよね。なぜ rename を覚えるんですか?mv old.txt new.txt のように 1 個の名前を変える なら mv で十分なんだ。mv だと 100 回打つことになる。rename なら ルールを 1 回書くだけ で全部に適用される。2026_ を付ける」「スペースをアンダースコアに変える」といった作業が一度で終わるよ。手作業のミスも減るんだ。ファイル名の変更は 元に戻しにくい操作 です。mv を 50 回打てば、打ち間違いも起きます。
rename でルールをまとめれば、確認すべき箇所が「ルール 1 個」に集約されます。その分だけ安全になります。
ただし逆の面もあります。ルールを間違えると、一度に 50 個の名前が変わります。 だから次の章の -n(事前確認)が必須になります。
3. まず -n で確認する(最重要の型)
結論:
renameは実行前に必ず-nを付けて「何がどう変わる予定か」を表示させる。問題なければ-nを外して本実行する。
rename でいちばん大事なのは、いきなり実行しない ことです。まず -n を付けます。これは --nono の短い書き方で、何もしないモードのことです。
-n を付けると、変更の 予定だけ が表示されます。
$ rename -n 's/jpeg/jpg/' *.jpeg
rename(photo1.jpeg, photo1.jpg) rename(photo2.jpeg, photo2.jpg) rename(photo3.jpeg, photo3.jpg)
rename(photo1.jpeg, photo1.jpg) と出ました。ファイルは変わっていないんですか?-n を付けている間は 1 個も変わっていない よ。rename(変更前, 変更後) の形で表示されるね。-n を外して同じコマンドをもう一度打つ。それで本当に名前が変わるよ。予定を確認できたら、-n を外して本実行します。
$ rename 's/jpeg/jpg/' *.jpeg
これで実際にファイル名が変わります。-v(--verbose)を付けると、変えた名前を表示してくれます。
$ rename -v 's/jpeg/jpg/' *.jpeg
photo1.jpeg renamed as photo1.jpg photo2.jpeg renamed as photo2.jpg
安全の鉄則
rename -n 'ルール' 対象で予定を確認します- 表示が正しければ
-nを外して実行します - 不安なときは
-vを付けて実行結果も表示します
この「確認 → 実行」の 2 段構えを必ず守ってください。
4. s/// で文字列を置き換える
結論:
's/置換前/置換後/'がもっとも使う形。ファイル名の中の文字列を別の文字列に置き換える。
Ubuntu の rename(Perl 版)には、's/古い/新しい/' という 置換ルール を書きます。これは Perl という言語の書き方です。s は substitute(置換)の頭文字です。
# 拡張子 .jpeg を .jpg に $ rename -n 's/jpeg/jpg/' *.jpeg # ファイル名の "draft" を "final" に $ rename -n 's/draft/final/' * # 先頭に "2026_" を付ける(^ は行頭の意味) $ rename -n 's/^/2026_/' * # 末尾に ".bak" を付ける($ は行末の意味) $ rename -n 's/$/.bak/' *
s/jpeg/jpg/ の最初の s は何ですか。スラッシュで区切られていますね。s は「置き換える(substitute)」という合図だよ。s/A/B/ で 「A を見つけて B に置き換える」 という意味になる。/ は区切り文字だね。s/置換前/置換後/ と覚えればいいよ。^ や $ も出てきましたが、これは何ですか。^ は「名前の先頭」、$ は「名前の末尾」だね。s/^/2026_/ は「先頭に 2026_ を足す」になる。s/$/.bak/ は「末尾に .bak を足す」だよ。よく使う置換パターン
| やりたいこと | ルール |
|---|---|
| 拡張子を変える | s/jpeg/jpg/ |
| 文字列を入れ替える | s/draft/final/ |
| 先頭に文字を足す | s/^/prefix_/ |
| 末尾に文字を足す | s/$/_suffix/ |
| 文字列を消す | s/_copy// |
置換後を空の // にすると「その文字列を削除する」という意味になります。
5. 大文字小文字をそろえる(y///)
結論:
'y/A-Z/a-z/'で大文字を小文字に一括変換できる。文字を1対1で置き換える変換ルール。
ファイル名の大文字を小文字にそろえたいときは、'y/A-Z/a-z/' を使います。y は文字単位の置き換えを表します。英語では transliterate と呼びます。
# 大文字をすべて小文字に $ rename -n 'y/A-Z/a-z/' * # 小文字をすべて大文字に $ rename -n 'y/a-z/A-Z/' *
IMG_001.JPG のように大文字が混ざったファイルを、全部小文字にそろえたいです。y/A-Z/a-z/ がぴったりだね。A-Z(大文字の A から Z)を、対応する a-z(小文字の a から z)に 1 文字ずつ置き換えるんだ。IMG_001.JPG なら img_001.jpg になるよ。s/// とは違うんですか。s/// は「文字列のかたまり」を置き換えるものだね。y/// は「1 文字ずつ」を対応表で置き換えるものだよ。y/// が向いているんだ。5-1. リナの失敗:片方だけ名前が変わらなかった
File.txt と file.txt を作りました。そこで rename 'y/A-Z/a-z/' * を実行したら、見慣れないメッセージが出ました。$ ls
File.txt file.txt
$ rename 'y/A-Z/a-z/' *
File.txt not renamed: file.txt already exists
$ ls
File.txt file.txt
file.txt になるよね。でも、その名前のファイルはもうそこにあったんだ。rename(Perl 版)は、変換先が既にある場合は上書きせずに止まる。だから not renamed と出たんだよ。-f を付けたときだけは上書きする。取り消せないから、この記事では -f を使わないでほしい。not renamed が出たら「その名前はもうある」という合図として読みます。-n を付けても、この判定は先に働きます。だから予定を見る段階で気づけます。
$ rename -n 'y/A-Z/a-z/' *
File.txt not renamed: file.txt already exists
大文字小文字だけが違う 2 つのファイルに注意してください。File.txt と file.txt は、小文字にそろえると同じ名前になります。
既定では 上書きされずスキップされます。not renamed と出た行は、変換されていないという意味です。
-f(--force)を付けたときだけは上書きされ、元のファイルは戻せません。この記事では -f を使いません。
6. 2種類の rename に注意(Perl 版 / util-linux 版)
結論: 同じ
renameでも実装が2種類あり構文が違う。rename --versionでどちらか確認する。Ubuntu の既定は Perl 版。
実は rename には 名前が同じで中身が違う 2 つのコマンド があります。これが初心者にとって最大の混乱ポイントです。
rename .jpeg .jpg *.jpeg のように スラッシュなし で書く例も出てきました。どちらが正しいんですか。rename --version を実行すれば分かるよ。$ rename --version
Perl 版(Ubuntu / Debian の既定)なら、File::Rename のような表示が出ます。
/usr/bin/rename using File::Rename version 1.xx
util-linux 版なら、util-linux の文字が出ます。
rename from util-linux 2.xx
2つの rename の違い
| 項目 | Perl 版(file-rename) | util-linux 版 |
|---|---|---|
| 主な環境 | Ubuntu / Debian | Fedora / RHEL 等 |
| 書き方 | rename 's/A/B/' * |
rename A B files |
| パターン | 正規表現が使える | 単純な文字列置換のみ |
| 事前確認 | -n |
-n |
正規表現とは、文字の並びをパターンで指定する書き方です。この記事で使う s/A/B/ もその一種です。
この記事は Perl 版(Ubuntu 既定)が前提です。 util-linux 版での .jpeg から .jpg への変更は、次のように書きます。
util-linux 版を使っている場合、同じ操作はこうなります。
# util-linux 版:rename 置換前 置換後 対象ファイル $ rename .jpeg .jpg *.jpeg
Ubuntu で Perl 版が入っていない場合は sudo apt install rename で導入できます。インストールには管理者権限が必要です。
まずは rename --version で確認してください。それが先です。
7. よくある初心者のつまずき
結論:
-nを付け忘れて即実行、対象ファイルの指定ミス、Perl 版と util-linux 版の取り違えが3大失敗。
7-1. -n を付けずにいきなり実行する
# NG: 確認なしで即実行(ルールが間違っていたら全部巻き込む) $ rename 's/a/b/' * # OK: まず -n で予定を確認してから $ rename -n 's/a/b/' *
リネームは元に戻しにくい操作です。必ず -n で予定を見てから 本実行してください。これだけで事故の大半は防げます。
7-2. 対象ファイルの指定が広すぎる
# 危険: カレントの全ファイルが対象になる $ rename -n 's/o/0/' * # 安全: 対象を .txt に絞る $ rename -n 's/o/0/' *.txt
* はカレントディレクトリの すべてのファイル を指します。意図しないファイルまで対象に入りかねません。*.txt のように範囲を絞ってください。
7-3. Perl 版のつもりで util-linux 版を使っている
rename 's/jpeg/jpg/' *.jpeg を打ったのに、何も変わりませんでした。s/.../.../ の書き方を理解しないんだ。rename --version で確認しよう。util-linux 版なら rename .jpeg .jpg *.jpeg の書き方に切り替えるといいよ。8. ミニ課題:実際にやってみよう
結論: 練習用ファイルを作り、置換・接頭辞付与・小文字化の3問を
-n付きで確かめる。
touch で作れば中身が空だから、消えても困らないよ。練習用ファイルを用意します。
$ mkdir -p ~/rename-practice && cd ~/rename-practice $ touch photo1.JPEG photo2.JPEG report_draft.txt
課題 1: .JPEG を .jpg に変える予定を、実行せずに表示してみよう。
ヒント 1(方向づけ)を見る
まだ実行はしません。「もし実行したらこうなる」という予定だけを出します。
そのためのオプションを 1 つ付けます。
ヒント 2(コマンド名)を見る
使うのは rename です。予定だけを出すのは -n です。ルールは 's/置換前/置換後/' の形で書きます。
対象は *.JPEG と指定します。
答えを見る
$ rename -n 's/JPEG/jpg/' *.JPEG
rename(photo1.JPEG, photo1.jpg) rename(photo2.JPEG, photo2.jpg)
このように予定が表示されれば成功です。ファイルはまだ 1 個も変わっていません。
課題 2: report_draft.txt の draft を final に変えよう。予定を確認してから本実行します。
ヒント 1(方向づけ)を見る
同じコマンドを 2 回打ちます。1 回目は予定の確認、2 回目が本実行です。
2 回目では、確認用のオプションを外します。
ヒント 2(コマンド名)を見る
ルールは 's/draft/final/' です。1 回目は -n を付けます。2 回目は -n を外します。
対象はファイル名を直接書けます。
答えを見る
$ rename -n 's/draft/final/' report_draft.txt $ rename 's/draft/final/' report_draft.txt $ ls
photo1.JPEG photo2.JPEG report_final.txt
report_final.txt になっていれば成功です。
課題 1 は -n だけで終えたので、.JPEG はまだ変わっていません。ここでも「-n の間は 1 個も変わらない」を確認できます。
課題 3: 残ったファイル名の大文字を、すべて小文字にそろえよう。
ヒント 1(方向づけ)を見る
文字列のかたまりではなく、1 文字ずつを対応表で置き換えます。s/// とは別の記号を使います。
先に -n で予定を確認してください。not renamed の行が出ないかを見ます。
ヒント 2(コマンド名)を見る
使うのは y/A-Z/a-z/ です。rename の後ろにクォートで囲んで書きます。対象は * です。
答えを見る
$ rename -n 'y/A-Z/a-z/' * $ rename 'y/A-Z/a-z/' *
not renamed: ... already exists と出た行は、変換されていません。その名前のファイルが既にあるという合図です。
9. 練習用ディレクトリを片づける
片づけには rm を使います。ここだけ扱いが違います
rm で消したファイルは、GUI と違ってゴミ箱に行きません。その場で完全に消えます。元には戻せません。
-r:ディレクトリを中身ごと消します-i:1 つずつ「消してよいか」を聞きます
-i を付けると、対象ごとに確認が表示されます。消してよければ y を入力して Enter を押します。やめるときは n を入力します。
消す前に、必ず ls でパスファイルやディレクトリの場所を表す文字列。と中身を目で確かめてください。
$ cd ~ $ ls ~/rename-practice $ rm -ri ~/rename-practice
10. コピペ用テンプレート
結論: 確認・置換・接頭辞接尾辞・小文字化・確認方法のよく使う型をまとめて手元に置いておく。
よく使う型をまとめておく(Perl 版前提)
# まず予定を確認(最重要) rename -n 's/古い/新しい/' * # 確認後に本実行 rename 's/古い/新しい/' * # 拡張子を変える rename -n 's/jpeg/jpg/' *.jpeg # 先頭に文字を足す rename -n 's/^/2026_/' * # 末尾に文字を足す rename -n 's/$/.bak/' * # 文字列を削除する rename -n 's/_copy//' * # 大文字を小文字にそろえる rename -n 'y/A-Z/a-z/' * # どの rename か確認する rename --version
11. 振り返り
rename はルールを 1 回書くだけで、たくさんの名前をまとめて変えられるんですね。-n を先に付けて、予定を目で確かめるんでした。File.txt と file.txt の失敗も、-n を見ていれば気づけたはずだよ。今日の 3 行まとめ
renameはルールを 1 回書くだけで、複数のファイル名をまとめて変えられる- 本実行の前に必ず
-nを付ける。予定が出るだけで、ファイルは 1 個も変わらない s/古い/新しい/は文字列の置き換え、y/A-Z/a-z/は 1 文字ずつの置き換えに使う