概要
mv(move)コマンドは、ファイルやディレクトリの場所を移動したり、名前を変更(リネーム)したりするためのコマンドです。
Linuxにおいては「場所を変えること」と「名前を変えること」はファイルシステム上では同質の操作として扱われるため、どちらもこのmvコマンドを使用します。日々のファイル整理から、スクリプトによる自動バックアップ処理まで幅広く利用される基本コマンドです。
仕様(引数・オプション)
構文
名前を変更する場合(リネーム)
mv [オプション] [現在のファイル名] [新しいファイル名]
移動する場合
mv [オプション] [移動元ファイル...] [移動先ディレクトリ]
主なオプション
上書きの制御やバックアップに関するオプションが充実しています。
| オプション | 説明 |
| -f | 確認なしで強制的に上書きします(force)。 |
| -i | 移動先に同名ファイルがある場合、上書きするか確認します(interactive)。 |
| -u | 移動先より新しいタイムスタンプのファイルのみ移動(上書き)します(update)。 |
| -t [ディレクトリ] | 移動先のディレクトリを明示的に指定します(target-directory)。 |
| -b | 上書きされるファイルのバックアップを作成します(末尾に ~ が付きます)。 |
| -S [文字列] | バックアップファイルの末尾に付ける文字列(サフィックス)を指定します。 |
| –backup=[方式] | バックアップの命名規則を制御します(tを指定すると番号付きなど)。 |
基本の使い方
1. ファイル名を変更する
ファイルの中身はそのままで、名前だけを変更します。
mv old_name.txt new_name.txt
2. ファイルをディレクトリへ移動する
ファイルを指定したディレクトリの中へ移動します。
mv document.pdf ./Documents/
実践コマンド
1. 複数のファイルを一括でディレクトリへ移動する
複数のファイルを羅列し、最後に移動先ディレクトリを指定することでまとめて移動できます。
mv image01.jpg image02.jpg image03.jpg ./images/
# またはワイルドカードを使用
mv *.jpg ./images/
2. 上書き時に確認メッセージを表示する
誤って重要ファイルを消さないよう、-iオプションを付けるのが安全です。
mv -i config.json ./backup/
実行結果イメージ:
mv: overwrite './backup/config.json'?
(yを入力してEnterで上書き、nで中止)
3. バックアップを作成しながら移動する
同名ファイルが存在する場合、元のファイルを消さずにバックアップファイルとして残します。
単純なバックアップ(~が付く):
# data.csv が既に存在する場合、data.csv~ として残る
mv -b new_data.csv ./data_dir/
番号付きバックアップ:
何度も同じ名前でバックアップを取りたい場合、–backup=t を使うと拡張子の後ろに番号が振られます。
mv --backup=t session.log ./logs/
実行結果イメージ(lsコマンドで確認):
session.log
session.log.~1~
session.log.~2~
4. ブレース展開を利用して手早くリネームする
バックアップファイルを作る際などに、ファイル名を2回入力する手間を省くシェル機能(ブレース展開)を使ったテクニックです。
# style.css を style.css.bak にリネーム
mv style.css{,.bak}
※ これはシェルによって mv style.css style.css.bak に展開されて実行されます。
5. 引数長制限を超える大量のファイルを移動する
数万個のファイルを mv * ../archive/ のように移動しようとすると、「Argument list too long(引数リストが長すぎます)」というエラーが出ることがあります。
この場合、xargsコマンドと -t オプション(移動先指定)を組み合わせることで解決できます。
# カレントディレクトリの全ての .log ファイルを ../log_archive/ へ移動
find . -maxdepth 1 -name "*.log" -print0 | xargs -0 mv -t ../log_archive/
カスタムポイント
- エイリアスの確認:
- 多くのディストリビューションでは、安全のために
alias mv='mv -i'がデフォルトで設定されています。-fを使ってもエイリアスが優先される場合があるため、本当に強制したい場合は\mvのようにバックスラッシュを付けて実行します。
- 多くのディストリビューションでは、安全のために
- バックアップ接尾辞:
- デフォルトの
~が嫌な場合は、-S .oldのように指定してfilename.txt.oldとすることができます。
- デフォルトの
注意点
- ディレクトリの移動と統合:
mv dir1 dir2を実行した際、dir2が存在しない場合はリネームになりますが、dir2が存在する場合は「dir2の中にdir1を移動する」という挙動になります。意図せず階層が深くならないよう注意が必要です。
- クロスデバイス移動のコスト:
- 同じパーティション内での
mvは一瞬で終わりますが、別のディスクやパーティションへの移動は「コピー&削除」の処理となるため、ファイルサイズに応じて時間がかかります。
- 同じパーティション内での
- 権限エラー:
- 移動先のディレクトリに書き込み権限がないと移動できません。
応用
ファイル名の大文字・小文字を一括変換する
mv 単体では難しい一括リネームですが、ループ処理と組み合わせることで可能です。
# 全ての .TXT ファイルを .txt に変更
for file in *.TXT; do
mv "$file" "${file%.TXT}.txt"
done
まとめ
mvコマンドは、単なる移動だけでなく、システム運用における安全なファイル更新(バックアップ作成や上書き確認)を担う重要なツールです。
特にバックアップオプション(-b や –backup=t)は、スクリプト内でログや設定ファイルをローテーションさせる際に非常に便利です。また、大量のファイルを扱う際は xargs と -t オプションの組み合わせが必須テクニックとなるため、覚えておくとトラブル回避に役立ちます。
