如何在 Linux 中正確使用 cp 命令
-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 命令的其他最佳示例嗎?請在下面的評論中告訴我們您的看法。