[UNIXコマンド]mvコマンドの基本を理解する

先生

ファイルやディレクトリの移動・名前変更ができるmvコマンドについて紹介します。

「mv」コマンドとは

mvコマンドは、LinuxやmacOSなどのUnix系OSでファイルやディレクトリを移動または名前変更するためのコマンドです。

mvコマンドの使い方まとめ

先にまとめます。

# -- 移動 --
# <ファイルパス>を<ディレクトリパス>配下へ移動させる
mv <ファイルパス> <ディレクトリパス>

# <ディレクトリパス1>を<ディレクトリパス2>配下へ移動させる
mv <ディレクトリパス1> <ディレクトリパス2>

# <ファイルパス1>,<ファイルパス2>,...を<ディレクトリパス>配下へ移動させる
mv <ファイルパス1> <ファイルパス2> <ディレクトリパス>

# -- 名前変更 --
# <ファイルパス1>を<ファイルパス2>に変更する
mv <ファイルパス1> <ファイルパス2>

# <ディレクトリパス1>を<ディレクトリパス2>に変更する
mv <ディレクトリパス1> <ディレクトリパス2>

※<ディレクトリパス2>が既に存在する場合は、名前変更とはならず<ディレクトリパス2>の配下へ移動となる

# -- オプション --
# 上書き確認をする
mv -i <ファイルorディレクトリパス1> <ファイルorディレクトリパス2>

# 確認なしで上書きする
mv -f <ファイルorディレクトリパス1> <ファイルorディレクトリパス2>

# 上書き時に「~」を末尾につけてバックアップを残す
mv -b <ファイルorディレクトリパス1> <ファイルorディレクトリパス2>

# 上書き時に数字を末尾につけてバックアップを残す
mv --backup=numbered <ファイルorディレクトリパス1> <ファイルorディレクトリパス2>

# 移動・名前変更の詳細情報を表示する
mv -v <ファイルorディレクトリパス1> <ファイルorディレクトリパス2>

mvコマンドの基本的な使い方

mvコマンドでは、ファイル・ディレクトリの移動および名前変更ができます。

移動

引数に移動元となるファイルおよびディレクトリパスと移動先となるディレクトリパスを指定することで移動させることができます。また移動元を複数指定することで、複数のファイル・ディレクトリを移動させることもできます。

# <ファイルパス>を<ディレクトリパス>配下へ移動させる
mv <ファイルパス> <ディレクトリパス>

# <ディレクトリパス1>を<ディレクトリパス2>配下へ移動させる
mv <ディレクトリパス1> <ディレクトリパス2>

# <ファイルパス1>,<ファイルパス2>,...を<ディレクトリパス>配下へ移動させる
mv <ファイルパス1> <ファイルパス2> <ディレクトリパス>

使用例1

root@localhost:~$ ls -lR
.:
total 5004
drwxr-xr-x 2 root root    4096 Mar 23 22:58 dir1
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file1.txt

./dir1:
total 0
root@localhost:~$ 
root@localhost:~$ mv file1.txt dir1/
root@localhost:~$ 
root@localhost:~$ ls -lR
.:
total 4
drwxr-xr-x 2 root root 4096 Mar 23 22:59 dir1

./dir1:
total 5000
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file1.txt   <--- 移動した
root@localhost:~$ 

使用例2

root@localhost:~$ ls -lR
.:
total 15004
drwxr-xr-x 2 root root    4096 Mar 23 22:59 dir1
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file1.txt
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file2.txt
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file3.txt

./dir1:
total 0
root@localhost:~$ 
root@localhost:~$ mv file1.txt file2.txt file3.txt dir1/
root@localhost:~$ 
root@localhost:~$ ls -lR
.:
total 4
drwxr-xr-x 2 root root 4096 Mar 23 23:00 dir1

./dir1:
total 15000
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file1.txt   <--- 移動した
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file2.txt   <--- 移動した
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file3.txt   <--- 移動した
root@localhost:~$ 

名前変更

引数に名前変更対象となるファイルおよびディレクトリパス、名前変更後のファイルおよびディレクトリパスを指定することで、名前変更ができます。

# <ファイルパス1>を<ファイルパス2>に変更する
mv <ファイルパス1> <ファイルパス2>

# <ディレクトリパス1>を<ディレクトリパス2>に変更する
mv <ディレクトリパス1> <ディレクトリパス2>

※<ディレクトリパス2>が既に存在する場合は、名前変更とはならず<ディレクトリパス2>の配下へ移動となる

使用例

root@localhost:~$ ls -l
total 5000
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file1.txt
root@localhost:~$ 
root@localhost:~$ mv file1.txt file2.txt 
root@localhost:~$ 
root@localhost:~$ ls -l
total 5000
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file2.txt   <--- 名前が変更された
root@localhost:~$ 

mvコマンドのオプション

いくつか便利なオプションがあります。

オプション詳細
-i上書き確認をする
-f確認なしで上書きする
-bバックアップを作成する
-v詳細情報を表示する

以降で各オプションの使い方について紹介します。

-i:上書き確認

移動先に同名のファイルやディレクトリが既に存在する場合、上書きする前に確認するようにできます。

# 上書き確認をする
mv -i <ファイルorディレクトリパス1> <ファイルorディレクトリパス2>

使用例

root@localhost:~$ ls -l
total 8000
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file1.txt
-rw-r--r-- 1 root root 3072000 Mar 23 23:02 file2.txt
root@localhost:~$ 
root@localhost:~$ mv -i file1.txt file2.txt 
mv: overwrite 'file2.txt'? n   <--- y以外を入力
root@localhost:~$ 
root@localhost:~$ ls -l
total 8000
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file1.txt   <--- 名前は変更されなかった
-rw-r--r-- 1 root root 3072000 Mar 23 23:02 file2.txt
root@localhost:~$ 
root@localhost:~$ mv -i file1.txt file2.txt 
mv: overwrite 'file2.txt'? y    <--- yを入力
root@localhost:~$ 
root@localhost:~$ ls -l
total 5000
-rw-r--r-- 1 root root 5120000 Mar 23 22:59 file2.txt    <--- 名前は変更され、上書きされた
root@localhost:~$ 

実行すると、対話式で「mv: overwrite ‘file2.txt’?」のように聞かれるので、「y」と入力すれば上書きされ、それ以外であれば上書きはされません。

-f:確認なしで上書き

強制的に移動や名前変更を実行します。移動先ファイルが既に存在していても確認なく上書きされます。

# 確認なしで上書きする
mv -f <ファイルorディレクトリパス1> <ファイルorディレクトリパス2>

使用例

root@localhost:~$ ls -l
total 8000
-rw-r--r-- 1 root root 5120000 Mar 23 23:04 file1.txt
-rw-r--r-- 1 root root 3072000 Mar 23 23:04 file2.txt
root@localhost:~$ 
root@localhost:~$ mv -f file1.txt file2.txt 
root@localhost:~$ 
root@localhost:~$ ls -l
total 5000
-rw-r--r-- 1 root root 5120000 Mar 23 23:04 file2.txt    <--- 上書きされた
root@localhost:~$ 

-b:バックアップを作成

上書き時に元のファイルまたはディレクトリのバックアップを残すことができます。

デフォルトだと「~」が末尾についた状態でバックアップされます。

# 上書き時に「~」を末尾につけてバックアップを残す
mv -b <ファイルorディレクトリパス1> <ファイルorディレクトリパス2>

使用例

root@localhost:~$ ls -l
total 10000
-rw-r--r-- 1 root root 5120000 Mar 22 17:07 file1.txt
-rw-r--r-- 1 root root 5120000 Mar 23 22:34 file2.txt
root@localhost:~$ 
root@localhost:~$ mv -b file1.txt file2.txt
root@localhost:~$ 
root@localhost:~$ ls -l
total 10000
-rw-r--r-- 1 root root 5120000 Mar 22 17:07 file2.txt
-rw-r--r-- 1 root root 5120000 Mar 23 22:34 file2.txt~   <--- バックアップが残った
root@localhost:~$ 

過去のバックアップしたものも消したくない場合は、numberedオプションを指定します。

この場合「-b」ではなく、「–backup」とする必要があります。

# 上書き時に数字を末尾につけてバックアップを残す
mv --backup=numbered <ファイルorディレクトリパス1> <ファイルorディレクトリパス2>

使用例

root@localhost:~$ ls -l
total 15000
-rw-r--r-- 1 root root 5120000 Mar 22 17:07 file1.txt
-rw-r--r-- 1 root root 5120000 Mar 22 17:07 file2.txt
-rw-r--r-- 1 root root 5120000 Mar 22 17:07 file3.txt
root@localhost:~$ 
root@localhost:~$ mv --backup=numbered file1.txt file3.txt                    
root@localhost:~$ mv --backup=numbered file2.txt file3.txt
root@localhost:~$ 
root@localhost:~$ ls -l
total 15000
-rw-r--r-- 1 root root 5120000 Mar 22 17:07 file3.txt
-rw-r--r-- 1 root root 5120000 Mar 22 17:07 file3.txt.~1~    <--- バックアップが残った
-rw-r--r-- 1 root root 5120000 Mar 22 17:07 file3.txt.~2~    <--- バックアップが残った
root@localhost:~$ 

-v:詳細情報を表示

コマンド実行時に作成したディレクトリの情報を表示させることができます。

操作ログを残したい時などには使っていきましょう。

# 移動・名前変更の詳細情報を表示する
mv -v <ファイルorディレクトリパス1> <ファイルorディレクトリパス2>

使用例

root@localhost:~$ mv -v file1.txt file2.txt 
renamed 'file1.txt' -> 'file2.txt'   <--- 詳細が表示された
root@localhost:~$ 

まとめ

以上です。今回はmvコマンドの基本的な使用方法について紹介しました。