Linuxでファイルを移動する方法|mvコマンドの使い方と主要オプションを解説

コマンドリファレンス

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.txtdocuments ディレクトリの中へ移動します。移動後は元の場所に 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メモリや別パーティションなど異なるファイルシステムをまたぐ移動では、内部的に「コピーしてから元ファイルを削除する」処理(cprm 相当)が行われます。ファイルサイズが大きいほど時間がかかり、途中で処理が中断すると移動元・移動先の両方にファイルが残る、または消えてしまう可能性がある点に注意してください。

関連コマンド

  • cp : ファイルやディレクトリをコピー(元ファイルは残る)
  • rm : ファイルを削除
  • rmdir : 空のディレクトリを削除
  • mkdir : 新しいディレクトリを作成
  • cd : カレントディレクトリを移動(ファイルではなく作業場所の移動)
  • ln : シンボリックリンク・ハードリンクを作成
  • touch : 空ファイルの作成・タイムスタンプ更新
  • find : ファイル・ディレクトリを検索
  • mvで複数ファイルを連番・日付で一括リネームする方法 : ループを使った応用例
  • install : コピー+パーミッション設定(インストール用途向け)

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

備考

  • 同じファイルシステム内では inode を移動するだけ なので高速です。
  • 異なるファイルシステム間では内部的に cprm が行われ、時間がかかることがあります。
  • mv はリネーム操作として使われることが多いですが、ファイル整理にもよく利用されます。

参考

Bash玄

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

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

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

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

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

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

Bash玄をフォローする

コメント