如何使用cp命令復制文件和目錄!【Linux命令合集】
Linux命令
只要你使用Linux,你就會一直使用cp命令。用于復制文件和目錄。
常用組合鍵:
# -r:復制整個目錄(遞歸)
# -p:保留原始文件所有者、組、權限和時間戳
cp -rp foldA foldB
今天詳細講解了Linux cp命令的使用方法。
1 cp命令復制文件和目錄的基礎知識
- 1.1普通復制
1.2按原樣復制文件名
1.3復制多個文件
1.4帶通配符的復制
2 cp 命令的有用選項
- 2.1 cp命令選項列表
2.2 -r 選項:復制整個目錄
2.3 -f選項:強制復制
2.4 -i選項:覆蓋時檢查
2.5 -b選項(–backup):覆蓋時創建備份文件
2.6 -s選項(–symbolic-link):創建符號鏈接
2.7 -l選項:創建硬鏈接
2.8 -v選項:顯示副本信息
2.9 -P選項(–parents):復制整個目錄結構
cp命令是copy的縮寫,是按原樣復制文件的命令。基本格式如下。
$ cp 復制原文件 復制后文件
例如,它看起來像這樣:
$ cp fileA.txt fileA_copy.txt
[wanglian@localhost shell]$ ls
fileA.txt
[wanglian@localhost shell]$ cp fileA.txt fileA_copy.txt
[wanglian@localhost shell]$ ls
fileA.txt fileA_copy.txt
[wanglian@localhost shell]$
復制現已完成。
當然,你也可以將其復制到其他目錄。以下示例將復制目標指定為 dir 目錄。
$ cp fileA.txt dir/fileA_copy.txt
這只是基礎知識,很多人可能都知道如何使用它。
按原樣復制文件名
如果要復制同名文件而不更改它,只需在復制目標中寫入目錄名稱即可。
$ cp 復制原文件 復制后路徑名
這就是制作副本所需要做的全部工作。它看起來像這樣:將 fileA.txt 復制到 dir 目錄中。
$ cp fileA.txt dir
[wanglian@localhost shell]$ ls
dir fileA.txt fileA_copy.txt
[wanglian@localhost shell]$ cp fileA.txt dir/
[wanglian@localhost shell]$
[wanglian@localhost shell]$ ls dir/
fileA.txt
[wanglian@localhost shell]$
復制多個文件
很多人可能不知道這一點,但是您也可以同時復制多個文件。將文件保存在與上面同名的目錄中。
$ cp 復制原文件1 復制原文件2 復制后路徑名
$ cp fileA.txt fileB.txt dir
[wanglian@localhost shell]$ ls
dir fileA.txt fileA_copy.txt fileB.txt
[wanglian@localhost shell]$
[wanglian@localhost shell]$ cp fileA.txt fileB.txt dir
[wanglian@localhost shell]$
[wanglian@localhost shell]$ ls dir/
fileA.txt fileB.txt
[wanglian@localhost shell]$
這樣就可以同時復制兩個文件了。
使用通配符復制
您還可以使用通配符一次性復制全部內容。它看起來像這樣:
$ cp file* 復制后路徑名
[wanglian@localhost shell]$ ls
dir fileA.txt fileA_copy.txt fileB.txt
[wanglian@localhost shell]$
[wanglian@localhost shell]$ cp file* dir/
[wanglian@localhost shell]$ ls dir/
fileA.txt fileA_copy.txt fileB.txt
[wanglian@localhost shell]$
這也非常有用。記住這一點并沒有什么壞處。
cp 命令的有用選項
cp 命令選項列表
稍后我會介紹一些特別有用的,但首先我們先介紹一個列表。
選項 | 解釋 |
---|---|
-A | 復制時保留原始文件屬性和目錄結構。盡可能。 |
-b | 創建將被覆蓋的文件的備份 |
-d | 復制符號鏈接時,復制實體 |
-F | 即使復制目的地存在同名文件,該文件也會被覆蓋而不會發出警告。 |
-i | 如果有文件將被覆蓋,系統會要求您確認。 |
-l | 創建硬鏈接 |
-P | 隨目錄復制 |
-p | 保留原始文件所有者、組、權限和時間戳 |
-r | 復制整個目錄(遞歸) |
-s | 創建符號鏈接 |
-u | 當保存目的地是同名文件時,請檢查時間戳,如果較新或相同則不要復制。 |
-v | 顯示副本詳細信息 |
這些是 cp 命令的選項。我們將只介紹有用的項目。
-r 選項:復制整個目錄
cp 命令最常用的選項是“-r”選項。
您可以通過添加 -r 選項來復制整個目錄。目錄中的文件也會被復制。
$ cp -r 復制原路徑 復制后路徑
[wanglian@localhost shell]$ ls
dir fileA.txt fileA_copy.txt fileB.txt
[wanglian@localhost shell]$
[wanglian@localhost shell]$ cp -r dir/ dir2/
[wanglian@localhost shell]$
[wanglian@localhost shell]$ ls dir2/
fileA.txt fileA_copy.txt fileB.txt
[wanglian@localhost shell]$
-f 選項:強制復制
雖然根據發行版而有所不同,但可能會要求您確認復制目的地是否存在同名文件。
如果不想一一回答,可以使用“-f”命令。以force的名義強行覆蓋。
[wanglian@localhost shell]$ cp -f fileA.txt fileB.txt
[wanglian@localhost shell]$
-i選項:覆蓋時檢查
與 -f 選項相反,有時您想要檢查它是否會被覆蓋。處理重要文件時,覆蓋可能是致命的。
$ cp -i 復制原文件 復制后文件
將出現“是或否”確認信息。
[wanglian@localhost shell]$ cp -i fileA.txt fileB.txt
cp: 'fileB.txt' を上書きしますか? no
[wanglian@localhost shell]$
這可能是最近發行版中的默認設置。如果沒有設置,可以使用別名來設置。
-b選項(–backup):覆蓋時創建備份文件
當您處理重要文件時,覆蓋它們是很可怕的。在這種情況下可以使用“-b”選項。
如果使用-b選項,則在執行cp命令的同時將創建備份文件。
[wanglian@localhost shell]$ cp -b fileA.txt fileB.txt
[wanglian@localhost shell]$ ls
dir dir2 fileA.txt fileA_copy.txt fileB.txt fileB.txt~
[wanglian@localhost shell]$
末尾帶有“~”的文件就是備份的文件。自動生成。
備份末尾添加的字符串不限于“~”,還可以指定。使用 --suffix 選項。
$ cp -b --suffix=_$(date +%Y%m%d) 復制原文件 復制后文件
如果這樣做,您可以附加今天的日期,例如“_20231123”。作為備份,這個更容易理解。
[wanglian@localhost shell]$ cp -b --suffix=_$(date +%Y%m%d) fileA.txt fileB.txt
[wanglian@localhost shell]$
[wanglian@localhost shell]$ ls
dir dir2 fileA.txt fileA_copy.txt fileB.txt fileB.txt_20231123 fileB.txt~
[wanglian@localhost shell]$
您還可以使用編號之類的方法添加數字。查看幫助了解詳細信息。
-s 選項(–symbolic-link):創建符號鏈接
通常,創建符號鏈接時使用ln命令。
$ ln -s 原文件 符號鏈接
事實上,您也可以使用 cp 命令來完成此操作。方法是使用-s命令。
$ cp -s 原文件 符號鏈接
你實際上可以創建一個。
[wanglian@localhost shell]$ ls
dir dir2 fileA.txt fileB.txt
[wanglian@localhost shell]$
[wanglian@localhost shell]$ cp -s fileA.txt fileA_symbolic.txt
[wanglian@localhost shell]$ ls -l
合計 8
drwxr-xr-x. 2 wanglian wanglian 62 11月 23 13:36 dir
drwxr-xr-x. 2 wanglian wanglian 62 11月 23 13:52 dir2
-rw-r--r--. 1 wanglian wanglian 17 11月 23 13:21 fileA.txt
lrwxrwxrwx. 1 wanglian wanglian 9 11月 23 14:57 fileA_symbolic.txt -> fileA.txt
-rw-r--r--. 1 wanglian wanglian 17 11月 23 14:49 fileB.txt
[wanglian@localhost shell]$
-l 選項:創建硬鏈接
同樣,您可以使用“-l”選項來創建硬鏈接。如果使用“ls -il”命令檢查,可以確認 i 節點(i-node)
是相同的。
[wanglian@localhost shell]$ cp -l fileA.txt fileA_hard.txt
[wanglian@localhost shell]$ ls -il
合計 12
33577067 drwxr-xr-x. 2 wanglian wanglian 62 11月 23 13:36 dir
50336705 drwxr-xr-x. 2 wanglian wanglian 62 11月 23 13:52 dir2
16778240 -rw-r--r--. 2 wanglian wanglian 17 11月 23 13:21 fileA.txt
16778240 -rw-r--r--. 2 wanglian wanglian 17 11月 23 13:21 fileA_hard.txt
16777375 lrwxrwxrwx. 1 wanglian wanglian 9 11月 23 14:57 fileA_symbolic.txt -> fileA.txt
16778241 -rw-r--r--. 1 wanglian wanglian 17 11月 23 14:49 fileB.txt
[wanglian@localhost shell]$
-v選項:顯示復制信息
使用 -v 選項顯示有關已復制內容的信息。這在使用通配符等時很有用。
[wanglian@localhost shell]$ cp -v file* dir
'fileA.txt' -> 'dir/fileA.txt'
'fileA_hard.txt' -> 'dir/fileA_hard.txt'
'fileA_symbolic.txt' -> 'dir/fileA_symbolic.txt'
'fileB.txt' -> 'dir/fileB.txt'
[wanglian@localhost shell]$
-P 選項(–parents):復制整個目錄結構
無法使用普通 cp 命令復制子目錄。在這種情況下,請使用“-P”選項。
如果您在沒有任何選項的情況下運行下面的示例,fileC.txt 通常會放置在 dir 目錄中。您可以看到,通過使用 --parents 選項,我們可以按原樣復制目錄結構。
[wanglian@localhost shell]$ cp --parents ./etc/fileC.txt dir
[wanglian@localhost shell]$
[wanglian@localhost shell]$ ls dir/
etc fileA.txt fileA_copy.txt fileA_hard.txt fileA_symbolic.txt fileB.txt
[wanglian@localhost shell]$