如何強制 cp 命令覆蓋檔案而不提示確認?
簡介
在類 Unix 作業系統的世界中,cp 命令在檔案管理中扮演著至關重要的角色。顧名思義,此命令允許您將檔案從一個位置複製到另一個位置。
無論您需要複製單個檔案還是傳輸包含許多檔案的資料夾,cp 都是許多 Linux 和 macOS 使用者的首選工具。cp 命令的基本語法相對簡單 - 輸入“cp”,後跟要複製的檔案或目錄的名稱,然後是其目標路徑。
但是,使用此命令時可能會出現一個常見問題:在嘗試覆蓋現有檔案時提示確認。如果您要複製大量檔案或使用自動化指令碼,這可能會非常耗時且令人沮喪。
覆蓋檔案時確認提示的煩惱
預設情況下,當使用 cp 時,如果目標目錄中已存在同名檔案,它會提示您在覆蓋之前確認。雖然此功能旨在防止意外資料丟失,但如果您一次複製許多檔案或使用需要自動化的指令碼,它也可能很煩人。假設您需要將數十甚至數百個檔案從一個目錄複製到另一個目錄。
如果每次 cp 遇到重複檔案時都暫停並等待您的確認,則可能需要數小時而不是幾分鐘才能完成。必須有一些方法可以解決此問題 - 幸運的是,確實有!
瞭解 -f 標誌
當我們想要使用 cp 命令複製檔案時,通常會收到一個提示,詢問我們是否真的要覆蓋現有檔案。這可能令人沮喪,尤其是在一次複製許多檔案時。
值得慶幸的是,有一個標誌可以強制 cp 命令覆蓋檔案而不提示確認。該標誌是 -f。
-f 標誌代表“強制”,它告訴 cp 命令複製並覆蓋任何現有的目標檔案,而無需先請求確認。此選項在指令碼或需要自動化檔案複製且不希望指令碼掛起在互動式提示上或由於非零退出狀態而失敗的情況下特別有用。
使用 -f 標誌的示例
假設您的主目錄中有兩個檔案:“file1.txt”和“file2.txt”。您想將“file1.txt”複製到名為“project_files”的目錄中。如果您使用常規的 cp 命令,如下所示 -
cp ~/file1.txt ~/project_files/
如果目標目錄中已存在同名檔案,則會提示您是否覆蓋。但是,如果您使用 -f 標誌,如下所示 -
覆蓋將自動發生,無需任何提示。
需要注意的是,使用此標誌意味著任何與正在複製的檔案同名的現有檔案都將被覆蓋,沒有任何警告。因此,在使用此選項時要格外小心!
將萬用字元與 -f 標誌一起使用
萬用字元的功能
cp 命令最強大的功能之一是能夠使用萬用字元一次複製多個檔案。萬用字元是表示檔名中一個或多個字元的特殊字元。
Linux 中最常用的萬用字元是“*”和“?”。“*”字元代表任意數量的字元,“?”代表單個字元。
例如,假設您有一個名為“documents”的目錄,並且在該目錄中,您有幾個名稱相似的檔案,如“document1.txt”、“document2.txt”等。與其手動逐個複製每個檔案,您可以使用帶萬用字元的 cp 命令,如下所示:cp documents/document*.txt /backup/。
cp documents/document*.txt /backup/
這將複製從“documents”目錄到“/backup/”目錄的所有以“document”開頭並以“.txt”結尾的檔案。在處理大量檔案時,使用萬用字元可以節省時間和精力。
將萬用字元與 -f 標誌一起使用
要使用萬用字元強制覆蓋而不提示確認,我們只需在 cp 命令中將它們與 -f 標誌結合使用。例如,如果我們想覆蓋當前工作目錄中的所有“.txt”檔案而不提示確認,我們可以使用:cp -f *.txt /backup/。
cp -f *.txt /backup/
這將複製當前工作目錄中的所有“.txt”檔案到“/backup/”目錄,並在沒有提示的情況下覆蓋任何現有檔案。在使用此方法時務必小心,因為如果使用不當,它可能導致意外的檔案覆蓋或刪除。
在將命令應用於重要資料之前,最好先在少量測試檔案上測試您的命令。如果您不確定您的場景或資料結構需要哪些特定的命令集,最好諮詢專家或至少閱讀有關 cp 命令的更多文件和指南。
使用 Bash 別名以提高便利性
作為 Linux 使用者,您可能熟悉使用命令列建立別名的概念。Bash 別名是可建立的自定義快捷方式,用於執行常用命令或命令組合。
cp 命令也不例外,透過使用別名,您可以顯著提高工作流程。當您需要執行涉及多個檔案和資料夾的複雜操作時,建立 cp 命令的 bash 別名會非常方便。
例如,假設您經常需要將所有檔案從一個目錄複製到另一個目錄,同時覆蓋任何現有檔案而不提示確認。在這種情況下,您可以建立一個結合了我們在前面部分討論的萬用字元和 -f 標誌的別名。
提供包含萬用字元和 -f 標誌的 Bash 別名建立示例
要建立包含萬用字元和 -f 標誌的 cp 命令的 bash 別名,請按照以下步驟操作 -
開啟您的終端。
鍵入“nano ~/.bashrc”以開啟 Nano 文字編輯器。
滾動到檔案底部,並使用所需的別名新增新行。
按“CTRL+X”,然後“Y”,然後“ENTER”儲存更改。
執行命令“source ~/.bashrc”或重新啟動終端。
以下是如何實現此目的的示例 -
alias cpo='cp -f /path/to/source/* /path/to/destination/'
在此示例中,我們建立了一個名為 cpo 的別名,其中包含萬用字元 (*) 和 -f 標誌選項,用於將所有檔案從一個目錄複製到另一個目錄,同時覆蓋任何現有檔案,而無需提示確認。透過使用此別名而不是每次想要以這種方式複製檔案時都鍵入長命令,我們節省了時間並使我們的工作流程總體上更高效。
結論
cp 命令是一個強大的工具,可用於輕鬆複製檔案和目錄。但是,當命令在覆蓋檔案之前提示確認時,可能會令人沮喪。幸運的是,可以透過使用 -f 標誌或將萬用字元與 cp 命令一起使用來強制覆蓋而不提示確認。
在使用 -f 標誌時,務必小心,因為它會強制覆蓋,沒有任何提示或警告。因此,在執行命令之前仔細檢查命令至關重要。
另一方面,萬用字元可以透過同時匹配多個檔案並複製它們而不提示確認來節省時間。使用 bash 別名還可以使使用這些命令更方便。