Linuxでファイル名を変更する基本は mv(move)コマンドです。
1つのファイルなら mv 旧ファイル名 新ファイル名 でその場でリネームできます。 複数のファイル名をまとめて変更したい場合は、rename コマンドや mv とループの組み合わせを使います。この記事では、単一ファイルのリネームから複数ファイルの一括変更、ありがちな失敗例まで実行例つきで解説します。
bashについて、基本的な考え方や使い方については bash から参照ください。
結論:ファイル名を1つ変更するなら mv コマンド
Linuxには「ファイル名変更」専用のコマンドはなく、ファイル移動用の mv コマンドを同じディレクトリ内で実行することでリネームを行います。
mv report.txt report_2026.txt
これで report.txt が report_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.txt や note.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 を付けて、意図しない上書きを防いでください。
関連コマンド
mv: ファイル・ディレクトリの移動とオプションの詳細- フォルダ内のファイルを連番や日付で一括リネームする方法 : ループを使った応用例
cp: ファイルやディレクトリをコピー(元ファイルは残る)rm: ファイルを削除find: ファイル・ディレクトリを検索touch: 空ファイルの作成・タイムスタンプ更新
Linuxコマンド全体を確認したい場合は linux コマンド一覧|用途別に整理した初心者向け完全ガイド も参照してください。
まとめ
- 1つのファイル名を変更するなら
mv 旧ファイル名 新ファイル名 - 複数ファイルをまとめて変更するなら
renameコマンド(Perl版と util-linux版で構文が異なる) renameが無い環境や連番・日付付けにはmvとforループを使うmv *.jpg *.pngのようなワイルドカード同士の一括変更はエラーになる- 上書き事故を防ぐには
-i、ドライランにはrename -nを活用する
参考
- manページ: man7.org mv(1)
- GNU Coreutils: https://www.gnu.org/software/coreutils/
- Debian manページ: rename(1) – Perl版

コメント