【Ubuntu】ファイルやディレクトリを移動・名前変更する方法(mv)

Ubuntuでファイル・ディレクトリを別の場所に移動させる方法です。

ファイル・ディレクトリの名前を変更する場合に使用できます。

mvでファイル・ディレクトリの移動

mvコマンドを使用すると、ファイルやディレクトリを移動したり名前を変更することが出来ます。

移動先にディレクトリを指定すると、移動元のデータは指定したディレクトリの中に移動されて移動元にはデータが残りません。

mv 移動元 移動先

下記の例では「test_01.txt」というファイルを「dir_01」ディレクトリに移動させています。

$ mv test_01.txt dir_01/

移動先にディレクトリを指定する場合、最後の「/」は省略することも出来ます。

$ mv test_01.txt dir_01

オプション

普段使用しそうなオプションを紹介します。

  • -b バックアップを作成
  • -i, --interractive 上書きを行う際に確認メッセージを表示
  • -f, --forcd 強制上書き
  • -n, --no-clobber 既存ファイルを上書きしない
  • -v 実行内容を表示

「-f」「-i」「-n」オプションはどれか1つだけのみ指定することが出来て、複数指定した場合は最後に指定したオプションが有効になります。

「-v」オプションを使用すると、下記のように実行内容が表示されます。

$ mv -v dir_01/test_01.txt dir_02
renamed 'dir_01/test_01.txt' -> 'dir_02/test_01.txt'

mv実行時の注意点

ファイルを移動させる場合、移動先に同じ名前のファイルがあった場合は既存のファイルは上書きされてしまいますので、同じ名前のファイルがないか十分に確認を行ってください。

「-i」や「-n」オプションを使用すると、同じ名前のファイルがあった場合でも自動的に上書きを行わないので、普段からこれらのオプションを使用するのも良いでしょう。

「~/.bashrc」や「~/.bash_aliases」で「alias mv='mv -i'」 とaliasを設定しておくと、自動的に「-i」オプションを指定した状態になるので安心できます。

ディレクトリを移動させる場合、移動先に同じ名前のディレクトリが存在している場合は、移動先のディレクトリ内にデータが存在していると、移動させることは出来ません。

ファイルの移動例

「dir_01」にある「text.txt」を「dir_02」に移動させます。

$ mv -v dir_01/test_01.txt dir_02
renamed 'dir_01/test_01.txt' -> 'dir_02/test_01.txt'

複数指定する方法

複数指定して移動を行うことも出来ます。

mv 移動元1 移動元2 移動元3 移動先

「dir_01」内にある「test_01.txt」「test_02.txt」「test_03.txt」を指定して「dir_02」ディレクトリに移動させます。

$ mv -v dir_01/test_01.txt dir_01/test_02.txt dir_01/test_03.txt dir_02
renamed 'dir_01/test_01.txt' -> 'dir_02/test_01.txt'
renamed 'dir_01/test_02.txt' -> 'dir_02/test_02.txt'
renamed 'dir_01/test_03.txt' -> 'dir_02/test_03.txt'

「dir_02」ディレクトリに指定したファイルが移動しています。

$ ls dir_01 dir_02
dir_01:

dir_02:
test_01.txt  test_02.txt  test_03.txt

ワイルドカードも使えます

複数のファイルを指定する際にワイルドカードも使用することが出来ます。

  • ? 任意の1文字
  • * 0文字以上の文字
  • [文字] []の中に含まれれる任意の1文字
  • [!文字] []の中に含まれない任意の1文字

「dir_02」にある「test_01.txt」「test_02.txt」「test_03.txt」ファイルを「test_*」というように指定して「dir_01」に移動させます。

$ mv -v dir_02/test_* dir_01
renamed 'dir_02/test_01.txt' -> 'dir_01/test_01.txt'
renamed 'dir_02/test_02.txt' -> 'dir_01/test_02.txt'
renamed 'dir_02/test_03.txt' -> 'dir_01/test_03.txt'

「dir_01」にファイルが移動されました。

$ ls dir_01 dir_02
dir_01:
test_01.txt  test_02.txt  test_03.txt

dir_02:

ディレクトリの移動例

「dir_01」ディレクトリを「dir_02」ディレクトリに移動させます。

$ mv -v dir_01 dir_02
renamed 'dir_01' -> 'dir_02/dir_01'

dir_02の中にdir_01ディレクトリが移動しています。

$ ls dir_01 dir_02
ls: cannot access 'dir_01': No such file or directory
dir_02:
dir_01

移動先に同じ名前のディレクトリがあった場合

ディレクトリを移動させる際に、移動先に同じ名前のでディレクトリがあった場合、移動先ディレクトリの中にデータが存在するかどうかで移動が出来るかどうかが決まります。

  • ディレクトリの中身が空の場合: 移動できる
  • ディレクトリの中身にデータが存在している場合: 移動出来ない
移動先のディレクトリが空の場合

以下の条件で「dir_01」ディレクトリを「dir_02」ディレクトリ内に移動させた場合の実行例です。

  • 「dir_02」には「dir_01」ディレクトリがすでに存在している
  • 「dir_02/dir_01」ディレクトリの中にデータは存在していない
$ ls dir_01 dir_02 dir_02/dir_01/
dir_01:
test_01.txt

dir_02:
dir_01

dir_02/dir_01/:

「dir_01」ディレクトリを「dir_02」ディレクトリにmvコマンドで移動させます。

移動先にある「dir_01」ディレクトリの内にデータが存在しない場合は、ディレクトリを移動させることが出来ます。

$ mv -v dir_01 dir_02
renamed 'dir_01' -> 'dir_02/dir_01'

中に入っているデータも移動先の移動しています。

$ ls dir_01 dir_02 dir_02/dir_01/
ls: cannot access 'dir_01': No such file or directory
dir_02:
dir_01

dir_02/dir_01/:
test_01.txt
移動先のディレクトリにデータが存在している場合

以下の条件で「dir_01」ディレクトリを「dir_02」ディレクトリ内に移動させた場合の実行例です。

  • 「dir_02」には「dir_01」ディレクトリがすでに存在している
  • 「dir_02/dir_01」ディレクトリの中に「test_02.txt」というデータが存在している
$ ls dir_01 dir_02 dir_02/dir_01/
dir_01:
test_01.txt

dir_02:
dir_01

dir_02/dir_01/:
test_02.txt

「dir_01」ディレクトリを「dir_02」ディレクトリにmvコマンドで移動させます。

移動先にある「dir_01」ディレクトリの内にデータが存在しているので、「dir_02/dir_01」ディレクトリの中が空じゃないとのメッセージが表示されて、ディレクトリを移動することは出来ません。

$ mv -v dir_01 dir_02
mv: cannot overwrite 'dir_02/dir_01': Directory not empty

名前の変更例

test_01.txtをtest_01_bk.txtに変更します。

$ ls
test_01.txt  test_02.txt  test_03.txt
$ mv -v test_01.txt test_01_bk.txt
renamed 'test_01.txt' -> 'test_01_bk.txt'
$ ls
test_01_bk.txt  test_02.txt  test_03.txt

オプションの使用方法

オプションの使用方法を実行例を使って説明していきます。

-b バックアップを作成

「-b」オプションを使用すると、移動先に同じ名前のフィアルがあった場合に既存のファイルをバックアップしてから、ファイルの上書きが行われます。

「test_01.txt」という同じ名前のファイルが「dir_01」「dir_02」に存在しています。

$ ls dir_01 dir_02
dir_01:
test_01.txt  test_02.txt  test_03.txt

dir_02:
test_01.txt

「dir_01/test_01.txt」を「dir_02」に移動させます。

$ mv -bv dir_01/test_01.txt dir_02
renamed 'dir_01/test_01.txt' -> 'dir_02/test_01.txt' (backup: 'dir_02/test_01.txt~')

表示されている内容をみると、「dir_02」ディレクトリにあった「test_01.txt」は「test_01.txt~」という名前でバックアップされていることがわかります。

-i, --interractive 上書きを行う際に確認メッセージを表示

「-i」オプションを使用すると、移動先の場所に同じ名前のファイルがあった場合に、上書きを行うかどうかの確認メッセージを表示させることが出来ます。

その際に「y」を入力すると上書きし、「n」を入力すると上書きを行わず処理を中止します。

$ mv -i dir_01/test_01.txt dir_02 
mv: overwrite 'dir_02/test_01.txt'? 

「y」を入力した場合

「y」を入力すると上書きが行われてファイルは移動されます。

$ mv -iv dir_01/test_01.txt dir_02
mv: overwrite 'dir_02/test_01.txt'? y
renamed 'dir_01/test_01.txt' -> 'dir_02/test_01.txt'

「n」を入力した場合

「n」を入力すると、上書きが行われずファイルの移動処理が中断されます。

$ mv -iv dir_01/test_01.txt dir_02/
mv: overwrite 'dir_02/test_01.txt'? n

移動の処理が中断されるので、ファイルはそのままになっています。

$ ls dir_01 dir_02 
dir_01:
test_01.txt  test_02.txt  test_03.txt

dir_02:
test_01.txt
複数ファイルを指定した場合

複数ファイルを指定してmvコマンドを実行した場合は、上書きを行わなかったファイル以外は移動されます。

$ mv -iv dir_01/test_01.txt dir_01/test_02.txt dir_01/test_03.txt dir_02/
mv: overwrite 'dir_02/test_01.txt'? n
renamed 'dir_01/test_02.txt' -> 'dir_02/test_02.txt'
renamed 'dir_01/test_03.txt' -> 'dir_02/test_03.txt'

-f, --forcd 強制上書き

「-f」オプションを使用すると、上書き確認のメッセージを表示させること無く強制的にファイルの上書きを行います。

「-i」と「-f」を同時に使用した場合、最後に指定した方が有効となるので、「alias」で「mv -i」と設定している場合等に、「-f」オプションを使用すると上書きの確認メッセージを表示させずに強制的にファイル移動の処理を行うことが出来ます。

「mv -i」がaliasに設定されている状態で、mvコマンドを実行します。

移動先の「dir_02」ディレクトリ内に同じ名前のファイルがあったので、上書きを行うかどうかの確認メッセージが表示されました。

$ alias | grep mv
alias mv='mv -i'
$ mv -v dir_01/test_01.txt dir_02
mv: overwrite 'dir_02/test_01.txt'?

「-f」オプションを指定することで強制的に上書きを行うため、上書きを行うかどうかの確認メッセージは表示されずにファイルの移動は行われました。

$ mv -fv dir_01/test_01.txt dir_02
renamed 'dir_01/test_01.txt' -> 'dir_02/test_01.txt'

-n, --no-clobber 既存ファイルを上書きしない

「-n」オプションを使用すると、移動先に同じ名前のファイルが有る場合、ファイルの置き換えを行わないメッセージを表示してファイルの移動処理を中断します。

$ mv -n dir_01/test_01.txt dir_02
mv: not replacing 'dir_02/test_01.txt'

コメント

タイトルとURLをコピーしました