cp (Unix)
cp是一個用於複製文件的UNIX命令。文件可以被複製到相同目錄下,也可以複製到其他完全不同的目錄中(甚至複製到不同的文件系統或是硬盤中)。如果文件將被複製到相同的目錄中,那麼目標文件文件必須使用不同於原文件的文件名;在其他情況下,目標文件的名稱允許使用與原文件相同或不同的名稱。原始的文件不會被改變。
cp 命令現在擁有多種實現版本,兩個主要的版本是POSIX cp 與 GNU cp。 GNU cp 有許多額外的選項。[1]
用法
將文件複製為另一文件:
cp [-f] [-H] [-i] [-p][--] 源文件 目标文件
將文件複製到一目錄下:
cp [-f] [-H] [-i] [-p] [-r | -R] [--] 源文件 ... 目标目录
將目錄複製為另一目錄(必須使用參數 -r 或 -R):
cp [-f] [-H] [-i] [-p] [--] { -r | -R } 源目录 ... 目标目录
參數
-f (強制) – 在目標文件因沒有寫權限而無法打開時刪除目標文件。這一移除動作先於所有的cp命令複製動作。
-L (間接引用) – 使cp命令跟隨符號鏈接,這樣cp命令將複製符號鏈接指向的文件而不是符號鏈接到目的位置。
-i (交互) – 提示您將要被覆蓋之文件的文件名。當目標目錄或是目標文件中包含一個與原文件(或目錄)名字相同的文件(或目錄)時,交互就會發生,如果你輸入 'y' 或者區域語言中等價於 'y'的字符,cp操作將覆蓋目標文件,其餘的任意回答都會避免目標文件被原文件覆蓋。
-p (保持) – 對於每個原文件(或目錄),在複製時也複製下述特性:
-R or -r (遞歸) – 複製目錄(遞歸地複製目錄中的所有內容)
範例
欲複製原文件的一份副本,執行:
cp prog.c prog.bak
這一操作把文件prog.c複製為prog.bak。如果prog.bak文件不存在,cp命令將創建此文件。如果目標文件已存在,cp命令將用原文件的內容替代目標文件中的內容。
欲複製當前工作目錄中的文件到另外一目錄中,執行:
cp jones /home/nick/clients
這一操作將 jones 文件複製到 /home/nick/clients/jones。
欲將文件複製為新的文件,並保留修改日期與相關的訪問控制權限,執行:
cp -p smith smith.jr
操作將smith文件複製為smith.jr文件。此時系統將給與smith.jr與smith文件相同的修改日期和時間而並不使用當前的系統時間。smith.jr文件同時也繼承了smith文件的訪問控制保護。
欲將某目錄中所有文件複製到新目錄中,執行:
cp /home/janet/clients/* /home/nick/customers
這一操作僅將clients目錄中的文件複製到customers目錄中。
欲將一個目錄,包括其包含的所有文件與子目錄複製到另一目錄中,執行:
cp -R /home/nick/clients /home/nick/customers
這一複製將clients目錄以及其中包含的所有文件、子目錄與子目錄中的文件複製到customers/clients目錄下。
注意在原目錄的結尾無斜槓符:如果你在GNU基礎的系統上執行cp -R /home/nick/clients/ /home/nick/customers
,這與原目錄沒有加結尾斜槓符的效果相同。
但如果你在BSD基礎系統上執行相同的命令,這將複製所有client目錄中的內容,而不是client目錄本身。
欲將複製指定的一些文件到另一目錄中,執行:
cp jones lewis smith /home/nick/clients
這一操作複製當前工作目錄下的 jones、lewis和smith 文件到 /home/nick/clients 目錄。
欲使用模式匹配字符集來複製文件,執行:
cp programs/*.c .
這一操作將programs目錄下所有以 .c 結尾的文件都複製到當前目錄下,當前目錄用單個點符號 . 表示。在 .c 和最後的 . 之間必須用空格隔開。
將文件複製到另一已存在文件的過程是:將已存在文件以更新模式打開(使用這一模式需要擁有目標文件的寫入權限)。操作的結果是目標文件保留了其原來擁有的權限位。