終端基礎:在 Linux 中複製文件和目錄
在終端基礎知識系列的這一部分中,學習如何在 Linux 中使用命令行複製文件和目錄。
複製文件是你經常執行的最基本但最重要的任務之一。
Linux 有一個專門的 cp 命令用於複製文件和目錄(文件夾)。
在終端基礎知識系列的這一部分中,你將學習在終端中複製文件和文件夾。
? 回想一下,以下是你迄今為止在本終端基礎知識系列中所學到的內容:
讓我們繼續該系列的第七章。
在 Linux 命令行中複製文件
讓我向你展示一些複製文件的示例。
將文件複製到另一個目錄
要將一個文件複製到另一目錄,你所要做的就是遵循給定的命令語法:
cp 源文件 目標目錄
例如,在這裡,我將名為 Hello.txt 的文件複製到名為 Tux 的目錄中:

正如你所看到的,文件已成功複製到 Tux 目錄中。
複製文件但重命名
你可以選擇在複製文件時重命名該文件。只需為「目標文件」指定一個不同的名稱即可。
cp 源文件 改名的文件
作為參考,在這裡,我將名為 Hello.txt 的文件複製到同一目錄,並將其重命名為 Renamed_Hello.txt:

為什麼要這麼做? 比如說,你必須編輯配置文件。一個好的做法是在編輯配置文件之前在同一位置對其進行備份。這樣,如果事情沒有按計划進行,你可以恢復到舊配置。
將多個文件複製到另一個位置
要將多個文件複製到另一個目錄,請按以下方式執行命令:
cp File1 File2 File3 FileN Target_directory
在這裡,我將多個文件複製到新位置。

? 當你複製多個文件時,僅使用
cp命令無法重命名它們。
複製時處理重複文件
默認情況下,如果目標目錄中存在同名文件,cp 命令將覆蓋該文件。
為了避免覆蓋,你可以在 cp 命令中使用 -n 選項,它不會覆蓋現有文件:
cp -n 源文件 目標目錄
例如,在這裡,我嘗試複製目標目錄中已有的兩個文件,並使用 -v 選項來展示該命令正在執行的操作:
cp -n -v itsFOSS.txt LHB.txt LU.txt ~/Tux

互動式複製文件
但是,當你想要覆蓋某些文件,而某些文件應該保持不變時該怎麼辦?
好吧,你可以使用 -i 選項在交互模式下使用 cp 命令,它每次都會詢問你是否應該覆蓋該文件:
cp -i 源文件 目標目錄

?️ 自己練習上述所有示例。你已經了解如何創建文件和文件夾,因此請重新創建所有內容。
在 Linux 命令行中複製目錄
mkdir 命令用於創建新目錄,rmdir 命令用於刪除(空)目錄。但沒有用於複製目錄的 cpdir 命令。
你必須使用相同的 cp 命令,但使用遞歸選項 -r 將目錄及其所有內容複製到另一個位置:
cp -r 源目錄 目標目錄
例如,在這裡,我將名為 IF 的目錄複製到 LHB:

但它複製了整個目錄。?
那麼,當你只想複製目錄內容而不是目錄本身時該怎麼辦?
你可以執行以下操作:
僅複製目錄的內容(不是目錄)
要僅複製目錄的內容,而不複製目錄本身,請在源目錄名稱的末尾附加 /.:
cp -r 源目錄/. 目標目錄
在這裡,我想複製名為 IF 的目錄的內容,其中包含以下三個文件:

我將執行以下命令將 IF 目錄的文件內容複製到 LHB:
cp -r IF/. LHB

你還可以在此處使用 源目錄/* 。
複製多個目錄
要複製多個目錄,你必須按以下方式執行命令:
cp -r 目錄1 目錄2 目錄3 目錄N 目標目錄
例如,在這裡,我將兩個名為 IF 和 LU 的目錄複製到 LHB:
cp -r IF LU ~/LHB

當你想要從多個目錄複製文件但不複製目錄本身時,你可以執行相同的操作:
cp -r 目錄1/. 目錄2/. 目錄3/. 目錄N/. 目標目錄

?️ 你還可以像重命名文件一樣重命名目錄。
測試你的知識
現在,讓我們看看你對到目前為止所學到的知識還記得多少。
- 創建一個名為
copy_practice的目錄。 - 將文件
/etc/services複製到這個新創建的文件夾。 - 在此目錄下創建一個名為
secrets的文件夾,並將文件/etc/passwd和/etc/services複製到其中。 - 將
copy_practice中的services文件複製到secrets文件夾中,但不要覆蓋它。 - 將
secrets文件夾複製到你的主目錄。 - 刪除
secrets和copy_practice目錄。
這會給你一些練習。
到目前為止進展順利。你已經學到了很多東西。在下一章中,你將了解如何使用 mv 命令移動文件和文件夾。
via: https://itsfoss.com/copy-files-directory-linux/
作者:Sagar Sharma 選題:lkxed 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

















