在 Linux 中使用 cp 命令
cp
命令是 Linux 中一個重要的命令,你可能經常會用到它。
正如名稱所示,cp
代表 復制copy,它被用于 在 Linux 命令行中復制文件和目錄。
這是一個相對簡單的命令,只有幾個選項,但你仍有必要深入了解它。
在展示 cp
命令的實際示例之前,我更建議你先熟悉絕對路徑和相對路徑的概念,將文件從一個位置復制到另一個位置時,你需要用到它們。
復制單個文件
cp
命令最簡單和最常見的用途是復制文件,只需指定源文件和要“粘貼”文件的目標目錄即可。
cp 源文件 目標目錄
將單個文件從源目錄復制到目標目錄。
在復制文件的同時重命名它
你將文件復制到另一個位置時可以同時進行 重命名。這有點類似于文本編輯器中的“另存為”選項。
為此,你必須在路徑中給出新的文件名。
cp 源文件 目標目錄/新文件名
在復制文件的同時重命名
復制多個文件
你還可以將多個文件復制到另一個位置。
cp 文件1 文件2 文件3 目標目錄
復制多個文件時,將目標目錄放在最后
在這種情況下,你無法重命名文件。
你還可以使用通配符擴展,將特定后綴的文件復制到另一個位置:
cp *.txt 目標目錄
使用通配符擴展復制多個文件,比如所有 .txt 后綴的文件
復制文件時避免覆蓋現有文件
如果你將 file1.txt
復制到一個已經存在名為 file1.txt
文件的目錄中,它會將原有的文件覆蓋掉。
如果你不希望這樣,cp
命令還提供了幾個選項來處理文件覆蓋的情況。
首先是使用選項 -i
的交互模式。在交互模式下,它會詢問是否確認或放棄覆蓋目標文件。
cp -i 源文件 目標目錄
cp:覆蓋 '目標目錄/源文件' ?
按 Y
覆蓋文件,按 N
跳過復制該文件。
覆蓋,但以交互方式詢問(內容將被覆蓋)
覆蓋,但以交互方式詢問(內容不會被覆蓋)
選項 -n
代表完全取消覆蓋。使用此選項時目標文件不會被覆蓋。
cp -n 源文件 目標目錄
取消覆蓋(目錄內文件的內容未更改)
還有一個選項 -b
,在目標目錄的文件將被覆蓋時自動為其創建備份。我猜這里 b
代表 備份backup。
cp -b 源文件 目標目錄
覆蓋文件,但在備份文件后附加了“~”。
最后,還有一個“更新update”選項 -u
,如果目標文件比源文件舊,或者目標文件不存在,就會被覆蓋掉。
cp -u 源文件 目標目錄
新文件會覆蓋舊文件
復制目錄(文件夾)
cp 命令也用來在 Linux 命令行中復制目錄。
在復制目錄時,你需要使用遞歸選項 -r
。
cp -r 源目錄 目標目錄
在 Linux 中使用 cp 命令復制整個目錄
你還可以將多個目錄復制到另一個位置:
cp -r 目錄1 目錄2 目錄3 目標目錄
使用 cp 命令復制多個目錄
在復制時保留屬性
當你將文件復制到另一個位置時,它的 時間戳、文件權限 甚至所有權都會發生變化。
這是正常的行為。但在某些情況下,你可能希望在復制文件時保留其原始屬性。
要保留屬性,請使用選項 -p
:
cp -p 源文件 目標目錄
?? 還有一個
-a
選項用于存檔模式。它將連 ACL 也保留下來。
??? 練習時間
想要練習一下 cp
命令嗎?以下是一些簡單的練習題供你嘗試。
- 打開終端并創建一個名為
practice_cp
的目錄。 - 現在,將
/etc/services
文件復制到這個新創建的目錄中。 - 在
practice
目錄中對復制的services
文件進行一些小的更改。 - 現在,使用更新模式再次復制
/etc/services
文件。有什么變化嗎?觀察一下。 - 查看
/var/log
目錄,并將以mail
開頭的日志文件復制到你的聯系目錄下。 - 現在,返回到你的家目錄,并創建一個名為
new_dir
的新目錄(好吧,我想不出更好的名字)。 - 將
practice_cp
目錄復制到new_dir
目錄中。
對你來說這些練習足夠用了。希望你能喜歡在這里學習 Linux 命令。