基礎指令:利用 mv 搬移檔案

技術手札基礎指令:利用 mv 搬移檔案

本文簡介指令 mv 的使用方法。

簡介

使用方法

mv 是一個在 GNU Core Utilities 中用於搬移檔案的指令,有兩種使用方式:

  1. 將檔案搬移至指定的新路徑。
  2. 將一個或多個檔案搬移至指定的目錄底下。

以下介紹這兩種用法。

用法 1(搬移至新路徑) 若要將一個檔案 SOURCE_FILE 搬到 TARGET_FILE,可以使用:

mv [OPTIONS] SOURCE_FILE TARGET_FILE

一些注意事項:

  1. TARGET_FILE 不能是現有目錄或指向目錄的符號連結。這是因為如果是目錄或指向目錄的符號連結的話,會被視為以下的用法 2。
  2. 如果 TARGET_FILE 已有檔案存在,則在搬移前會移除 TARGET_FILE
  3. SOURCE_FILE 不能是 ...SOURCE_FILE 也不能是 TARGET_FILE 的祖先目錄。
  4. 如果 SOURCE_FILETARGET_FILE 位於不同檔案系統,則可能會因為不能直接搬移,變成先複製,再刪除來源檔案。

用法 2(搬移至目錄底下) 如果我們想要將檔案搬移到指定目錄 TARGET_DIR 底下的話,可以使用:

mv [OPTIONS] SOURCE_FILE... TARGET_DIR

其中 TARGET_DIR 是目錄或指向目錄的符號連結。這樣就會將各個 SOURCE_FILE 搬移到 TARGET_DIR 底下。

例如,如果我們執行:

mv SOURCE1 SOURCE2 TARGET_DIR

會和以下指令的效果相同:

mv SOURCE1 TARGET_DIR/SOURCE1
mv SOURCE2 TARGET_DIR/SOURCE2

範例

搬移檔案

假設我們在目錄 /home/alice 中,其中有 archiveexperiment 兩個子目錄,且在 ./experiment 中有檔案 memoreport

$ pwd
/home/alice
$ find
.
./archive
./experiment
./experiment/memo
./experiment/report

現在我們想將 ./experiment 中的 memoreport 搬移至 ./archive 底下。這時候就可以使用 mv 搬移:

$ mv experiment/* archive

備註 上述指令中的 * 會展開,變成:

$ mv experiment/memo experiment/report archive

這時候再檢查一次目錄結構,即可確認檔案已經都搬移到 ./archive 當中。

$ find
.
./archive
./archive/memo
./archive/report
./experiment

搬移目錄

假設我們在目錄 /home/alice 中,其中有 archiveexperiment 兩個子目錄,且在 ./experiment 中有檔案 memoreport

$ pwd
/home/alice
$ find
.
./archive
./experiment
./experiment/memo
./experiment/report

現在我們想將整個目錄 ./experiment 搬移至 ./archive 底下。這時候可以使用 mv 搬移:

$ mv experiment archive

備註 上述指令等同於:

$ mv experiment archive/experiment

這時候再檢查目錄結構,即可確認 ./experiment 已經被搬移到 ./archive/experiment

$ find
.
./archive
./archive/experiment
./archive/experiment/memo
./archive/experiment/report