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