mv コマンド

目次

概要

mv - ディレクトリやファイルを移動・名前変更する

コマンドライン

mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...

対象バージョン

説明

ファイルやディレクトリをディレクトリ配下に移動

ファイル(fileA.txt) やディレクトリ(dirA) を、指定したディレクトリ(dst-dir) 配下に移動します。

$ mv fileA.txt dst-dir      # fileA.txt を dst-dir ディレクトリ配下に移動
$ mv dirA dst-dit           # dirA を dst-dir ディレクトリ配下に移動

ファイル名やディレクトリ名を変更

ファイル名やディレクトリ名を変更する際にも使用されます。

$ mv fileA.txt fileB.txt    # fileA.txt を fileB.txt にファイル名変更
$ mv dirA dirB              # dirA を dirB にディレクトリ名変更

ファイルの上書きを警告

-i オプションをつけると移動先に同名のファイルが既に存在する場合に警告メッセージが表示されます。y を入力すると上書きします。

$ mv -i fileA.txt fileB.txt
mv: overwrite 'fileB.txt'? y

ファイルを入れ替え

--exchange オプションを指定すると移動元ファイルと移動先ファイルを入れ替えます。GNU mv 9.5 からサポートされました。

$ mv --exchange fileA.txt fileB.txt     # fileA.txt と fileB.txt を入れ替える

オプション

確認

-i, --interactive
上書きの前に確認プロンプトを表示します。
-f, --force
上書き前の確認プロンプトを表示しません。

バックアップ

--backup[=CONTROL]
バックアップ先にすでに同名のファイルが存在する場合、バックアップファイルを残します。詳細は cp コマンドの説明を参照してください。
-S, --suffix=SUFFIX
--backup オプションで作成するファイル末尾の ~ を別のサフィックスに変更します。詳細は cp コマンドの説明を参照してください。
-b
--backup=existing と同等です。

上書き

--update[=UPDATE]
コピー先に同名ファイルがすでに存在する場合の動作を指定します。UPDATE には下記のいずれかを指定します。
  • all : 常に上書きします
  • none : 常に上書きしません。警告なしにスキップします
  • older : コピー先が古い時だけ上書きします(デフォルト)
-u
--update=older と同等です。
-n, --no-clobber
ファイルを上書きせずスキップします。-i, -f, -n を複数指定した場合は最後のものが優先されます。

入れ替え

--exchange
移動元と移動先を入れ替えます。下記は、fileA.txt の内容を fileB.txt に、fileB.txt の内容を fileA.txt に入れ替えます。GNU mv 9.5 からサポートされました。
$ mv --exchange fileA.txt fileB.txt

セキュリティ

-Z, --context
移動対象ファイルの SELinux セキュリティコンテキストをデフォルトに設定します。

情報表示

-v, --verbose
実行状況を表示します。
--debug
デバッグ情報を出力します。-v オプションも付加されます。
--help
ヘルプメッセージを表示して終了します。
--version
バージョン情報を表示して終了します。

その他

--no-copy
名前変更が失敗した場合にファイルのコピーを行いません。
-t, --target-directory=DIRECTORY
移動先のディレクトリ名を引数ではなくオプションで指定します。xargsfind -exec {} + と組み合わせる際に便利です。
$ touch fileA.txt fileB.txt fileC.txt
$ mkdir backup
$ find . -name "*.txt" | xargs mv --target-directory=backup
# または
$ find . -name "*.txt" -exec mv --target-directory=backup {} +
--strip-trailing-slashes
コマンドラインの SOURCE に / がある場合と無い場合で挙動が異なるため、コピー元に指定したディレクトリ名から / を取り除いて動作を統一的にするという説明ですが、Linux ではこのオプションの効能を確認することができませんでした。シンボリックリンクファイルをコピーする際には確かに / の有無により動作が変わるのですが、--strip-trailing-slashes をつけても動作は変わりませんでした。誰か効能をご存じの方がいれば...。
-T, --no-target-directory
引数の DEST をディレクトリ名ではなく通常ファイルと見なします。下記の例では fileB に関しては -T オプションをつけることでエラーが出ます。ファイル名を変更する際に誤って変更先のディレクトリ配下に移動してしまうのを防ぐ場合などに有効です。
$ mkdir dst
$ touch fileA fileB
$ mv fileA dst
$ mv -T fileB dst
mv: cannot overwrite directory 'dst' with non-directory 'fileB'