👨‍💻簡介

  • cp(copy)
  • 用途:複製檔案(copy)和目錄

語法

cp [OPTIONS] SOURCE DEST

參數

參數說明
-a, –archive效果同-dpR,保留連結、文件屬性,並複製目錄下的所有內容,通常在複製目錄時使用
–attributes-only只複製文件的屬性,內容不複製
–backup[=CONTROL]備份每個現有的目標文件
-b不接受參數版的–backup
–copy-contents遞歸模式下複製特殊文件的內容
-d複製時保留軟連結
-f, –force強制覆蓋已經存在的目標文件,不會跳出提示
-i, –interactive-f選項相反,在覆蓋目標文件之前給出提示,要求用戶確認是否覆蓋,回答 y 時目標文件將被覆蓋。
-H跟隨源文件命令行中顯式給出的符號鏈接
-l, –link使用硬鏈接取代複製
-L, –dereference總是跟隨源文件中的符號鏈接
-n, –no-clobber不要覆寫已有的文件(覆蓋先前給出的 -i 選項)
-P, –no-dereference永遠不要跟隨源文件中的符號鏈接
-p不接受參數版的–preserve
–preserve[=ATTR_LIST]除複製文件的內容外,還把修改時間和訪問權限也複製到新文件中。保留指定的屬性(默認:模式、從屬關係、時間戳),如果可能的話還有額外屬性:上下文、鏈接(links)、xattr、all
–no-preserve=ATTR_LIST不要保留指定的屬性
–parents在目標目錄下使用完整的源文件名
-R, -r, –recursive遞歸複製目錄
–reflink[=WHEN]控制克隆/寫入時複製(CoW)副本。詳情見下文
–remove-destination打開目的
–sparse=WHEN控制稀疏文件的創建。詳情見下文
–strip-trailing-slashes移除每個源文件參數後的任何末尾斜槓
-s, –symbolic-link建立軟連結而不是複制
-S, –suffix=後置字串覆蓋原本的備份後綴
-t, –target-directory=目錄將所有源文件參數給出的內容複製到目標目錄中
-T, –no-target-directory將目標文件當作普通文件對待(而不是目錄)
-u, –update僅在源文件比目標文件新,或者目標文件不存在的情況下複製
-v, –verbose顯示覆蓋訊息
-x, –one-file-system停留在當前文件系統中
-Z將目標文件的 SELinux 安全上下文設置為默認類型
–context[=CTX]類似-Z,或者如果給定了上下文(CTX)那麼將SELinux或者SMACK
安全上下文設置爲給定值

默認情況下,程序會使用一種粗糙的啓發式算法探測源文件是否是稀疏的,若判定爲稀疏,則目標文件也會以稀疏形式創建。這個行爲可以通過

  • --sparse=auto指定。若指定
  • --sparse=always,將在源文件包含足夠多內容爲零的字節序列時將其視作稀疏文件。使用
  • --sparse=never 以禁止創建稀疏文件。

當指定了--reflink[=always]時,進行輕量級複製,其中的數據塊僅在被修改時進行復制。如果這樣的複製失敗,或無法實行,或者指定了--reflink=auto時,回退到標準複製。

備份的後綴爲"~",除非設置了--suffix或者SIMPLE_BACKUP_SUFFIX。版本控制方式可以使用 --backup選項或者VERSION_CONTROL環境變量進行指定。可用的值如下:

  • none, off:永遠不製作備份(即使給出了 –backup )
  • numbered, t:製作編號的備份
  • existing, nil:如果已編號副本存在則編號,否則採用簡單方式
  • simple, never:總是製作簡單備份 作爲一個特例,cp將在同時給出force選項與backup選項,並且源文件和目標文件是同一個已存在普通文件的情況下製作備份副本。

基本操作

  1. 複製目錄
cp -r source/ destdir
  1. 複製並改名
cp aaa bbb
  1. 複製目錄及屬性
cp -rp source/ destdir
  1. 複製多檔到單目錄下
cp aaa bbb destdir
  1. 透過匹配複製
cp *.log dest

參考資料