Linuxでファイルを移動するには、mv(move)コマンドを使います。
ファイルやディレクトリを移動したり、名前を変更できるコマンドで、コピー (cp) と違い元のファイルは残らず移動されます。移動先に同じ名前を指定すればリネーム(名前変更)操作にもなります。
bashについて、基本的な考え方や使い方については bash から参照ください。
Linuxでのファイル移動とは
GUIのファイルマネージャでは、ファイルをドラッグ&ドロップしてフォルダ間を移動します。Linuxのターミナルで同じ操作を行うコマンドが mv です。マウス操作と違い、数百のファイルでも1行のコマンドで一瞬かつ正確に移動でき、誤ってコピーが残ってしまう心配もありません。
mv は次の2つの用途で使われます。
- ファイル・ディレクトリの移動:
mv 移動元 移動先ディレクトリ - 名前の変更(リネーム):
mv 元の名前 新しい名前(移動先が既存ディレクトリでない場合)
移動先の第2引数がディレクトリかどうかで、mvは「移動」と「リネーム」を自動的に判断します。同じディレクトリ内で別名を指定すればリネームに、既存のディレクトリを指定すればそのディレクトリへの移動になります。
構文(Syntax)
mv [オプション] 移動元 移動先
mv [オプション] 移動元... 移動先ディレクトリ
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
| (なし) | ファイルを移動またはリネーム | mv old.txt new.txt |
-i | 上書き前に確認 | mv -i file.txt backup.txt |
-f | 確認せずに強制上書き | mv -f file.txt backup.txt |
-n | 既存ファイルを上書きしない | mv -n file.txt backup.txt |
-u | 移動元が新しい場合のみ上書き | mv -u file.txt backup.txt |
-v | 実行内容を表示 | mv -v file.txt backup.txt |
--backup | 上書き前にバックアップを作成 | mv --backup file.txt backup.txt |
--suffix=SUF | バックアップファイルの拡張子を指定 | mv --backup --suffix=.bak file.txt backup.txt |
実行例
ファイルをリネーム
mv file.txt file_old.txt
ファイルを別フォルダへ移動
mv report.txt documents/
report.txt が documents ディレクトリの中へ移動します。移動後は元の場所に report.txt は残りません。
ディレクトリを移動
mv dir1 /tmp/
フォルダごとまとめて移動したい場合も同じ書き方です。中身のファイルを個別に選択する必要はありません。
複数ファイルをまとめて移動
mv *.txt /home/user/docs/
上書き前に確認
mv -i report.txt report_old.txt
出力例:
mv: overwrite 'report_old.txt'? y
強制的に上書き
mv -f config.conf /etc/config.conf
更新されたファイルだけ上書き
mv -u new_data.csv data.csv
実行内容を表示
mv -v old.log archive.log
出力例:
renamed 'old.log' -> 'archive.log'
エラー例(存在しないファイル)
mv notfound.txt dest.txt
出力例:
mv: cannot stat 'notfound.txt': No such file or directory
注意点:移動先ディレクトリが存在しない場合の事故
移動先に指定したディレクトリが存在しないと、mv はエラーにならず指定した名前のファイルにリネームしてしまうことがあります。
mv data.txt backup_dir
# backup_dir ディレクトリが存在しない場合、
# data.txt が「backup_dir」という名前の“ファイル”にリネームされる
GNU coreutils 9.4で実機検証したところ、移動先の末尾に / を付けて mv data.txt backup_dir/ のように実行すると、ディレクトリが存在しない場合は mv: cannot move 'data.txt' to 'backup_dir/': Not a directory というエラーで停止し、意図しないリネームを防げます。フォルダへ移動するつもりのときは、移動先の末尾に / を付ける習慣をつけると安全です。
異なるファイルシステム間での移動
同じファイルシステム内(同じディスク・同じパーティション)での移動は、ファイルの実体を動かさずinodeの参照先を書き換えるだけなので、ファイルサイズに関わらず一瞬で完了します。
一方、USBメモリや別パーティションなど異なるファイルシステムをまたぐ移動では、内部的に「コピーしてから元ファイルを削除する」処理(cp → rm 相当)が行われます。ファイルサイズが大きいほど時間がかかり、途中で処理が中断すると移動元・移動先の両方にファイルが残る、または消えてしまう可能性がある点に注意してください。
関連コマンド
cp: ファイルやディレクトリをコピー(元ファイルは残る)rm: ファイルを削除rmdir: 空のディレクトリを削除mkdir: 新しいディレクトリを作成cd: カレントディレクトリを移動(ファイルではなく作業場所の移動)ln: シンボリックリンク・ハードリンクを作成touch: 空ファイルの作成・タイムスタンプ更新find: ファイル・ディレクトリを検索- mvで複数ファイルを連番・日付で一括リネームする方法 : ループを使った応用例
install: コピー+パーミッション設定(インストール用途向け)
Linuxコマンド全体を確認したい場合は linux コマンド一覧|用途別に整理した初心者向け完全ガイド も参照してください。
備考
- 同じファイルシステム内では inode を移動するだけ なので高速です。
- 異なるファイルシステム間では内部的に
cp→rmが行われ、時間がかかることがあります。 mvはリネーム操作として使われることが多いですが、ファイル整理にもよく利用されます。
参考
- manページ: man7.org mv(1)
- GNU Coreutils: https://www.gnu.org/software/coreutils/

コメント