Linuxでファイル名を変更する方法|mv・renameコマンドの使い方

実務レシピ

Linuxでファイル名を変更する基本は mv(move)コマンドです。
1つのファイルなら mv 旧ファイル名 新ファイル名 でその場でリネームできます。 複数のファイル名をまとめて変更したい場合は、rename コマンドや mv とループの組み合わせを使います。この記事では、単一ファイルのリネームから複数ファイルの一括変更、ありがちな失敗例まで実行例つきで解説します。

bashについて、基本的な考え方や使い方については bash から参照ください。

結論:ファイル名を1つ変更するなら mv コマンド

Linuxには「ファイル名変更」専用のコマンドはなく、ファイル移動用の mv コマンドを同じディレクトリ内で実行することでリネームを行います。

mv report.txt report_2026.txt

これで report.txtreport_2026.txt という名前に変わります。mv は移動先の第2引数が既存ディレクトリかどうかで「移動」と「リネーム」を自動的に判断し、既存ディレクトリでなければリネームとして処理します。mv コマンド自体の詳しい移動オプションは mvコマンドの使い方と主要オプション で解説しています。

mvコマンドでファイル名を変更する基本

mv [オプション] 旧ファイル名 新ファイル名

ディレクトリ名の変更も書き方は同じです。

mv olddir newdir

リネームで使う主なオプション

オプション説明使用例
(なし)そのまま変更後の名前で上書きmv a.txt b.txt
-i変更後の名前が既存ファイルと重複する場合に確認mv -i a.txt b.txt
-f確認せずに強制的に上書きmv -f a.txt b.txt
-n変更後の名前が既存なら何もしないmv -n a.txt b.txt
-v変更内容をログ表示mv -v a.txt b.txt

実行例:上書き確認をしてから変更

mv -i note.txt report_2026.txt

変更後の名前がすでに存在するファイルの場合、次のように確認プロンプトが表示されます。

mv: overwrite 'report_2026.txt'? y

y と入力すると上書きされ、それ以外を入力すると変更はキャンセルされます。誤って別のファイルを消してしまう事故を防げるため、リネーム時は -i を付けるのがおすすめです。

複数ファイルの名前をまとめて変更する(renameコマンド)

mv は1回の実行で1つのファイルしかリネームできません。複数ファイルの名前を規則的に一括変更したい場合は rename コマンドを使います。ただし rename は環境によって構文が異なるため注意してください。

系統主な配布元構文
Perl版(file-rename)Ubuntu / Debian系の既定rename 's/置換前/置換後/' 対象ファイル...(正規表現)
util-linux版RHEL / CentOS / Arch系の既定rename 置換前文字列 置換後文字列 対象ファイル...(単純な文字列置換)

Perl版rename:拡張子を一括変更

rename 's/\.txt$/\.bak/' *.txt

report.txtnote.txt といったファイルの拡張子だけを .bak に一括変更します。実行前に -n オプションを付けると、実際には変更せず対象ファイルと変更後の名前だけを表示できます。

rename -n 's/\.txt$/\.bak/' *.txt
rename -v 's/\.txt$/\.bak/' *.txt

-n(ドライラン)で結果を確認してから -v(実行しつつログ表示)で本番実行する、という流れにすると事故を防げます。

util-linux版rename:文字列を一括置換

rename old new *.txt

ファイル名に含まれる old という文字列を new に置換します。正規表現は使えず、最初に一致した文字列だけが置換される点がPerl版との違いです。

rename コマンドがインストールされていない環境では、次のようなエラーになります。その場合は次章の mv とループを使う方法か、パッケージマネージャで rename(Debian/Ubuntuは apt install rename)を導入してください。

rename: command not found

renameが無い環境では mv とループで一括変更する

rename コマンドが使えない場合や、連番・日付を付けたい場合は mv をループで回す方法が確実です。

for file in *.txt; do
  mv "$file" "${file%.txt}.bak"
done

この例では .txt ファイルの拡張子だけを .bak に一括変更しています。連番リネームや日付付きリネームなど、より実践的なループの書き方は フォルダ内のファイルを連番や日付で一括リネームする方法 で詳しく解説しています。

よくある失敗と注意点

mv にワイルドカードを2つ渡すとエラーになる

*.jpg*.png に一括変更しようとして、次のように書いてしまうミスがよくあります。

mv *.jpg *.png

GNU coreutils 9.4で実機検証したところ、*.png に一致するファイルが存在しない場合、シェルは *.png をそのままの文字列として mv に渡します。mv は複数の移動元に対して単一のファイル名を移動先にはできないため、次のエラーになりリネームは行われません。

mv: target '*.png': No such file or directory

mv はワイルドカード同士の一括置換に対応していません。拡張子の一括変更をしたい場合は、前述の rename コマンドか for ループを使ってください。

ディレクトリ名変更で中に移動されてしまう

変更後の名前と同じディレクトリがすでに存在すると、リネームではなくそのディレクトリの中へ移動されてしまいます。

mv olddir newdir
# newdir ディレクトリがすでに存在する場合、
# olddir は newdir/olddir として中に移動される

意図せず階層が変わってしまうため、リネーム前に ls で変更後の名前が既存でないか確認する習慣をつけると安全です。

上書き前提でファイルが消える

mv は変更後の名前が既存ファイルと重複していても、既定では確認なしに上書きします(環境によっては alias mv='mv -i' で確認が既定になっている場合もあります)。重要なファイルをリネームするときは -i または -n を付けて、意図しない上書きを防いでください。

関連コマンド

Linuxコマンド全体を確認したい場合は linux コマンド一覧|用途別に整理した初心者向け完全ガイド も参照してください。

まとめ

  • 1つのファイル名を変更するなら mv 旧ファイル名 新ファイル名
  • 複数ファイルをまとめて変更するなら rename コマンド(Perl版と util-linux版で構文が異なる)
  • rename が無い環境や連番・日付付けには mvfor ループを使う
  • mv *.jpg *.png のようなワイルドカード同士の一括変更はエラーになる
  • 上書き事故を防ぐには -i、ドライランには rename -n を活用する

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント