コマンド
mv
ファイル・ディレクトリの移動、リネーム (名前変更)
最終更新
UNIX/Linux の mv コマンドはファイルの移動と、ファイル名の変更という2つの機能を持つコマンドである。基本的なコマンドであるものの、ディレクトリが存在するかどうかで挙動がかわるのでわかりづらいコマンドでもある。
移動の場合:
% mv [移動元ファイル] [移動先ディレクトリ]
% mv [移動元ディレクトリ] [移動先ディレクトリ]
% mv [移動元ファイル1] [移動元ファイル1] [移動元ディレクトリ1] [移動元ディレクトリ2] [移動先ディレクトリ]
リネームの場合:
% mv [変更前ファイル名] [変更後ファイル名]
% mv [変更前ディレクトリ名] [変更後ディレクトリ名]
●mv コマンドのよくある使い方
file.txt を dir/ に移動:
file1.txt と file2.txt を dir/ に移動:
% mv file1.txt file2.txt dir/
(to-dir ディレクトリが存在する場合) dir を to-dir の下に移動:
(dir2 が存在しない場合) dir1 を dir2 にリネーム:
逆に言うと、ファイルやディレクトリを移動したいなら、移動先ディレクトリを mkdir コマンドであらかじめ作成しておく必要がある。
●mv コマンドの、移動・リネームのミス防止
上記のように mv コマンド実行時にディレクトリを作り忘れると、移動のつもりが誤ってリネームしてしまうことになる。コマンドラインからタイプするときもミスしやすいが、シェルスクリプトで処理を自動化する際も、想定外のバグを防止するための方法を考察する。
当ページ管理人としては、事故防止のため以下のルールを提案する。
こうしておくと、ファイルの移動時に dir を作り忘れても、エラーとなる。
日本語環境:
% mv file.txt dir/
mv: cannot move `x' to `y/': ディレクトリではありません
英語環境:
% mv file.txt dir/
mv: cannot move `x' to `y/': Not a directory
ただし、ディレクトリを移動をしようとして移動先の dir2 を作り忘れた場合は、スラッシュをつけてもリネームが成功してしまうので、万能のルールではない。
主に Linux で使われる GNU coreutils の mv コマンドであれば、-t または --target-directory を指定すると、移動先ディレクトリが存在しない場合必ずエラーになる。
% mv -t dir2 dir1
mv: `dir2' にアクセス中: そのようなファイルやディレクトリはありません
→ mv --target-directory=dir2 dir1 でも同じ効果がある。
●拡張子の一括変更
DOS・Windows とは違い、UNIX では ファイルグロブの展開はシェルの役割なので、
などとしても拡張子の一括変換はできない。Linux においては rename コマンドにて
一括リネームが可能である。
Linux 以外の場合は、csh・tcsh なら foreach、sh・bash なら for を使うとよい。
●mv コマンドのオプション
▷ -i 移動先のファイルが既に存在する場合、上書きしてよいか確認する
▷ -f 強制的に削除を行う。alias mv mv -i としているときに -f オプションを使うと便利
▷ -R 指定ディレクトリ以下のファイルを再帰的に移動
▷ -t または --taget-directory:
Linux の mv のみ使用可。移動先のディレクトリを指定する。上記で説明したように、移動のつもりがリネームさせないために使える。また、xargs コマンドと組み合わせて使う際、下記のように素直に書くことができる。
find . -name \*.txt | xargs mv -t to-dir/
このオプションを使わない場合、下記のようにわかりづらい書き方になる。
% find . -name \*.txt | xargs -i -n 10 mv {} /tmp
→ GNU xargs の場合 (遅い)
% find . -name \*.txt | xargs -J % mv % /tmp
→ BSD xargs の場合
●関連コマンド
移動やリネームではなく、元ファイルをのこしたままコピーする場合は cp コマンドを使う。
mv コマンドは、移動先ディレクトリを新規作成することはない。移動先ディレクトリはあらかじめ mkdir コマンドで作成しておこう。
mv 結果の確認のため、ls や cd コマンドを活用してほしい。
読み方
mv
(UNIXコマンド) [えむ・う゛い] [むーぶ]