ファイルの移動は単純に見えて、上書き・権限エラー・パスの取り違えといったミスが本番環境で起きやすい操作です。まず動くコマンドを示し、そのあとで安全に使うためのオプションと実務的な注意点を整理します。
基本:ファイルを別ディレクトリへ移動する
mv コマンドの基本構文は「移動元 → 移動先」の順です。
# ファイルを指定ディレクトリへ移動する
mv report.txt /var/log/archive/
# 移動後に確認する
ls -l /var/log/archive/report.txt
移動先にディレクトリ名を指定するとファイル名はそのまま保持されます。移動先にファイル名を指定すると、移動と同時にリネームされます。
# 移動しながらリネームする
mv report.txt /var/log/archive/report_2024.txt
同一ディレクトリ内でリネームだけ行う場合も mv を使います。
# カレントディレクトリ内でリネーム
mv old_name.conf new_name.conf
上書きを防ぐ:安全オプションの使い分け
デフォルトの mv は移動先に同名ファイルがあると無警告で上書きします。本番ファイルを扱う際は必ずオプションを付けてください。
# -i:上書き前に確認プロンプトを出す(対話的)
mv -i config.yaml /etc/myapp/config.yaml
# -n:上書きしない(移動元は元の場所に残る)
mv -n config.yaml /etc/myapp/config.yaml
# -v:実際に何が移動されたかを表示する
mv -v config.yaml /etc/myapp/config.yaml
# → 'config.yaml' -> '/etc/myapp/config.yaml' のように出力される
-n と -i を同時に指定した場合、GNU mv では後から書いたほうが優先されます。スクリプトで自動処理するなら -n、手動作業で都度判断するなら -i が適しています。
複数ファイルの一括移動
複数ファイルをまとめて移動するときは、末尾の引数を移動先ディレクトリにします。
# 複数のファイルを一度に移動する
mv file1.log file2.log file3.log /var/log/archive/
# ワイルドカードで拡張子ごと移動する
mv /tmp/work/*.csv /data/import/
# 移動後にカウントを確認する(スクリプトでの安全確認用)
ls /data/import/*.csv | wc -l
ワイルドカードを使う場合、シェルが展開した結果に意図しないファイルが含まれていることがあります。事前に ls /tmp/work/*.csv で対象を確認してから実行するのが確実です。
ディレクトリごと移動する
mv はディレクトリもそのまま扱えます。cp -r のように再帰オプションは不要です。
# ディレクトリを別の場所へ移動する
mv /home/user/project /opt/projects/
# 確認
ls -ld /opt/projects/project
ただし、移動元と移動先が異なるファイルシステム(別パーティション・別マウントポイント)をまたぐ場合、内部的にはコピーと削除が行われます。大きなディレクトリを別パーティションへ移動すると時間がかかるうえ、途中でディスクが満杯になるリスクもあります。その場合は rsync で先にコピーし、確認後に元を削除する手順のほうが安全です。
更新されたファイルだけを移動する
定期バッチなどで「移動先より新しいファイルだけ上書き移動したい」場合は -u オプションを使います。
# タイムスタンプが新しいファイルだけ移動する
mv -uv /tmp/incoming/*.log /var/log/app/
ある運用現場では、夜間バッチで生成されたログを集約ディレクトリへ移動する処理に -u を組み合わせることで、再実行時の二重処理を防いでいます。
権限エラーが出たときの確認手順
Permission denied で移動が止まった場合は、移動元ファイルの書き込み権限だけでなく、移動先ディレクトリへの書き込み権限も確認してください。
# 移動元ファイルの権限確認
ls -l /tmp/work/target.conf
# 移動先ディレクトリの権限確認
ls -ld /etc/myapp/
# 所有者が root のディレクトリへ移動する場合は sudo を付ける
sudo mv target.conf /etc/myapp/
sudo で移動したファイルの所有者は root になります。アプリケーションが一般ユーザーで動いている場合は、移動後に chown で所有者を変更してください。
# 所有者をアプリ実行ユーザーに戻す
sudo chown myapp:myapp /etc/myapp/target.conf
ファイルの移動は一見シンプルですが、パスの取り違え・上書き・ファイルシステムをまたいだ大容量移動・権限の変化、といった落とし穴が重なりやすい操作です。本番作業では -v で実行ログを目視しながら進める習慣が事故を防ぎます。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
