如何在 Linux 中正確使用 cp 命令

言鼎科技 2023-07-10 371

-v,該選項為每個處理的文件提供診斷。


讓我們使用以下命令下載 file-1.txt 文件:


$cp -v 文件1.txt 文件3.txt


在上面的輸出中,箭頭表示正在復制的文件。左邊的參數(shù)是源文件,右邊的參數(shù)是目標文件。


3. 如何將多個文件復制到數(shù)據(jù)庫


到目前為止,我們只使用了單個文件和當前項目目錄。但在實際的生產(chǎn)環(huán)境中,我們必須處理大量的文件。在這種情況下,一種常見的用例是將多個文件復制到單個文件夾。


顯然我們可以多次運行 cp 命令來實現(xiàn)它,但這不是最好的方法。為了有效地執(zhí)行此類操作,我們可以使用 cp 命令的不同語法。


因此,首先創(chuàng)建一個名為 dir-1 的新目錄:


$mkdir dir-1

現(xiàn)在,讓我們使用一個命令將所有三個文件復制到 dir-1 文件夾:


$cp -v 文件-1.txt 文件-2.txt 文件-3.txt dir-1


上面的輸出顯示所有文件都已復制到 dir-1 目錄中。另外,需要注意的是,要使用此附加語法,該庫必須已經(jīng)存在并且必須是命令的最后一個參數(shù)。


4. 如何避免覆蓋文件

默認情況下,cp 命令會更新目標文件,這意味著如果目標中存在同名文件,它將覆蓋該文件。但是,我們可以-n使用該選項覆蓋此默認行為。


為了理解這一點,讓我們嘗試覆蓋現(xiàn)有文件:


$cp -n -v 文件1.txt 文件2.txt

在本例中,我們使用-v選項來指示 file-2.txt 文件不被覆蓋。


5. 如何覆蓋文件

在前面的示例中,我們了解了如何避免覆蓋目標文件。但有時我們希望以更安全的方式編寫文件延續(xù)。


在這種情況下,我們可以使用命令-i選項使復制過程交互。此選項在覆蓋文件之前顯示警告消息并等待用戶確認。



為了說明這一點,讓我們嘗試覆蓋現(xiàn)有文件:


$ cp -i 文件1.txt 文件2.txt


cp:覆蓋“file-2.txt”?

正如我們所看到的,訂單正在等待確認。與其他 Linux 命令一樣,我們可以使用y繼續(xù)或n中止。


cp 命令的這種默認非合作行為是相對不安全的。用戶可能會錯誤地覆蓋基本設(shè)置。因此,某些 Linux 發(fā)行版默認使用 alias 命令強制執(zhí)行通信行為:


$alias cp='cp-i'

6. 僅當源是最新時才覆蓋文件

在前面的示例中,我們了解了如何使用交互模式。然而,有時用戶可能會無意中覆蓋新文件。


為了避免此類錯誤情況,我們可以使用-uselect,它僅在源比目標新或文件不在目標中時才嘗試復制操作。


首先,編輯源文件的時間戳:


$ touch -t 10101010 文件-1.txt

$ ls - l 文件 - 1 .txt

在上面的示例中,我們使用-ttouch 命令中的選項將文件的時間戳設(shè)置為 2010 年 10 月 10 日。


接下來,讓我們將目標文件的時間戳更新為當前時間:


$ touch 文件 - 2 . txt

現(xiàn)在,讓我們嘗試使用選擇創(chuàng)建一個復制函數(shù)-u:


$ cp -u -v 文件1.txt 文件2.txt

在這里,我們可以看到尚未嘗試復制操作,因為目標文件比源文件新。


最后,讓我們交換源參數(shù)和目標參數(shù)并運行副本:


$ cp -u -v 文件2.txt 文件1.txt

從上面的結(jié)果中,我們可以觀察到復制操作成功,因為源文件比目標文件新。



7. 如何在覆蓋之前創(chuàng)建備份文件

我們可以指示 cp 命令在覆蓋目標文件之前對其進行備份。為此,我們可以使用--backup創(chuàng)建自動備份的選項。


$ cp --backup=編號 -v 文件-1.txt 文件-2.txt

在此示例中,我們使用了備份編號系統(tǒng)。此過程在存儲的文件名中使用遞增的數(shù)字。


為了理解這一點,讓我們多次運行一個命令并查看輸出:


$ cp --backup=編號 -v 文件-1.txt 文件-2.txt

$ cp --backup=編號 -v 文件-1.txt 文件-2.txt

$ cp --backup=編號 -v 文件-1.txt 文件-2.txt


8. 如何單擊復制覆蓋文件

在前面的幾個示例中,我們了解了如何以更安全的方式覆蓋文件。但是,在極少數(shù)情況下,需要覆蓋該文件。然而,并不能保證該過程總是成功。


例如,如果目標文件沒有權(quán)限,復制操作將會失敗。讓我們用一個例子來說明這一點。


首先,更改目標文件的權(quán)限:


$ chmod 444

$ ls -l 文件 - 2 .txt

現(xiàn)在,讓我們嘗試覆蓋 file-2.txt 文件:


$cp 文件-1.txt 文件-2.txt

從上面的輸出中,我們可以看到該命令因拒絕訪問錯誤而失敗。


為了克服這個限制,我們可以使用-fselect,如果目標文件無法打開,它會刪除目標文件并嘗試復制操作。


現(xiàn)在,讓我們使用-f選項來硬覆蓋文件:


$ cp -f -v 文件1.txt 文件2.txt


9. 如何在復制前刪除目標文件

在前面的示例中,我們了解了如果執(zhí)行期間發(fā)生錯誤如何刪除目標文件。然而,有時需要先提取目標文件,然后再執(zhí)行復制操作。


為了滿足這樣的要求,我們可以使用--remove-destination年份選項。


$cp --remove-destination -v 文件-1.txt 文件-2.txt


從上面的輸出中我們可以看到cp命令首先提取目標文件,然后執(zhí)行復制操作。


10. 如何創(chuàng)建硬鏈接文件而不是復制

我們可以創(chuàng)建硬鏈接而不是更新源文件。當磁盤空間有限時,此選項起著重要作用。


因此,讓我們使用-l選擇來建立牢固的聯(lián)系:


$cp -l -v 文件1.txt 文件4.txt

現(xiàn)在,讓我們看一下兩個文件的索引節(jié)點號,以驗證緊密連接:


$ls -i1 文件1.txt 文件4.txt


在上面的輸出中,第一列中的數(shù)字表示索引節(jié)點號。


11. 如何創(chuàng)建軟鏈接文件而不是復制

同樣,我們可以使用選項創(chuàng)建軟鏈接而不是創(chuàng)建新代碼,-s如下所示:


$cp -s -v 文件-1.txt 文件-5.txt

現(xiàn)在,讓我們看看符號連接是否正確完成:


$ls -l 文件-5.txt


在上面的結(jié)果中,最后一列表示模型鏈接關(guān)系。


12. 如何在復制過程中保護文件屬性

與文件關(guān)聯(lián)的屬性有多種,例如訪問時間、修改時間、權(quán)限等。默認情況下,復制文件時不會保留這些屬性。要覆蓋此默認行為,我們可以使用-p選項。


要理解這一點,首先編輯 file-1.txt 的時間戳:


$ touch -t 10101010 文件-1.txt

現(xiàn)在,讓我們通過保留其所有屬性來復制該文件:


$ cp -p -v 文件1.txt 文件6.txt

最后,檢查 file-6.txt 文件的時間戳:


$ls -l 文件-6.txt


13. 如何遞歸復制函數(shù)

到目前為止我們已經(jīng)了解了如何復制單個文件。然而,我們通常必須復制特定目錄中的所有文件和子目錄。


-r在這種情況下,我們可以通過使用or選項來使用遞歸模式-R。


因此,讓我們創(chuàng)建一個目錄并在下面添加一些文件和子目錄:


$ mkdir -p dir-1/dir-2

$ touch dir-1/file-1.txt dir-1/dir-2/file-2.txt

接下來,檢查數(shù)據(jù)庫設(shè)計是否正確:


$tree dir-1

現(xiàn)在,讓我們使用以下命令遞歸復制目錄 dir-1:


$cp -r -v dir-1 dir-3

最后,檢查所有文件和子目錄是否備份成功:


$tree dir-3


14. 如何在多個站點上下載

與文件一樣,我們可以使用單個命令遞歸地復制多個目錄。然而,為了做到這一點,目標寄存器必須已經(jīng)存在并且是命令中的最后一個參數(shù)。讓我們通過一個例子來理解這一點。


首先,創(chuàng)建一個新網(wǎng)站:


$mkdir dir-4

現(xiàn)在,讓我們使用以下命令將 dir-1 和 dir-3 目錄復制到 dir-4 目錄:


$cp -r -v dir-1 dir-3 dir-4

同樣的,我們可以使用命令-t選項來得到同樣的結(jié)果。該選項允許我們指定目標目錄。所以我們也可以將它用作第一個參數(shù):


$cp -t dir-4 -r -v dir-1 dir-3


在本文中,我們討論如何使用 cp 命令復制文件和文件夾。初學者在日常生活中使用 Linux 系統(tǒng)時可以看到這些例子。


你也許也喜歡:


進度 – 顯示(cp、mv、dd、tar)命令的復制數(shù)據(jù)百分比

使用“pv”命令監(jiān)控(復制/查看/移動)數(shù)據(jù)進度

在使用中

高級復制命令 - 在 Linux 中復制大文件/文件夾時顯示高級代碼

您還知道 Linux 中 cp 命令的其他最佳示例嗎?請在下面的評論中告訴我們您的看法。

言鼎科技

The End