Linux の mv コマンドは、ファイルとディレクトリをある場所から別の場所に移動するために使用されます。ファイルの移動とは別に、ファイルまたはディレクトリの名前を変更することもできます。
1.ファイルの名前を変更
mv コマンドを使用してファイルの名前を変更している間、別の名前に移動した後でも inode 番号は同じままです。ファイルを別のファイルシステムに移動すると、inode 番号が異なります。
$ cd /tmp $ ls -i sample.txt 136407 sample.txt $ mv sample.txt sample1.txt $ ls -i sample1.txt 136407 sample1.txt
注: ls コマンドの例で前述したように、ls -i はファイルの inode 番号を表示します。
2.ディレクトリの名前を変更
ファイルの名前を変更するのと同じように、以下に示すように mv コマンドを使用してディレクトリの名前を変更できます。これにより、名前を変更した後もディレクトリの inode 番号が同じに保たれます。
ls -l dir を実行すると、ディレクトリ内のファイルが表示されます。ディレクトリのプロパティを表示するには、-d オプションを使用します。 -i オプションは、ディレクトリの inode 番号を表示します。
$ ls -ldi dir1 271365 drwxr-xr-x 2 bala bala 4096 2010-10-30 20:25 dir1 $ mv dir1 dir2 $ ls -ldi dir2 271365 drwxr-xr-x 2 bala bala 4096 2010-10-30 20:25 dir2
3.上書き前に確認を求める
デフォルトでは、mv コマンドは宛先ファイルが存在するかどうかの確認を求めず、単純に上書きします。これを回避するには、以下に示すように -i オプションを使用して宛先ファイルを上書きする前に、move コマンドから確認を取得することをお勧めします。 'y' または 'n' を入力して、移動操作を受け入れるか拒否するかを指定できます。
$ mv -i sample.txt sample1.txt mv: overwrite `sample1.txt'?
宛先ファイルのパーミッションがソース ファイルと異なる場合、mv -i コマンドは次の確認を表示します。
$ mv -i sample.txt sample1.txt mv: try to overwrite `sample1.txt', overriding mode 0644 (rw-r--r--)? y
4.複数のファイルを特定のディレクトリに移動
mv コマンドを使用して、複数のファイルを移動できます。次の例では、現在のディレクトリの内容を別のディレクトリに移動します。
$ cd chap1 $ ls -F ex1.c ex2.c ex3.c example/ exercise/ $ mv * chap2/
5.上書きする前に宛先のバックアップを取る
mv –suffix オプションを使用すると、上書きする前に宛先ファイルのバックアップを取ることができます。元の宛先ファイルは、-S または –suffix オプションで指定された拡張子で移動されます。
$ ls file1 file2 $ mv --suffix=.bak file1 file2 $ ls file2 file2.bak
注: 「mv –suffix」のエイリアスを作成すると、mv コマンドを使用するたびにバックアップ先ファイルが存在する場合に自動的にバックアップが作成されます。
6.移動先ディレクトリに存在しないファイルのみを移動
mv * を実行すると、すべてのファイルが移動先ディレクトリに移動されます。ただし、ソース ディレクトリから移動先ディレクトリに存在しないファイルのみを移動する場合は、以下に示すように mv -u オプションを使用します。
次のコマンドは、ex2 と ex2 のみを chap1 から chap2 に移動します。ex1 ファイルは chap2 に既に存在するため、移動されません。
$ ls chap1 ex1 ex2 ex3 $ ls chap2 ex1 $ mv -u chap1/* chap2/ $ ls chap1 ex1 $ ls chap2 ex1 ex2 ex3