cp(copy)是 Linux 系統中複製檔案與目錄的核心指令。雖然基本用法直觀,但其豐富的參數選項能應對保留屬性、遞迴複製、符號連結處理、備份機制等進階需求。本文系統整理語法格式、參數對照表與實戰場景,助你精準掌握複製操作的每個細節。

# 1. 單一來源複製到單一目標
cp [選項]... [-T] 來源 目標
# 2. 多個來源複製到目標目錄
cp [選項]... 來源... 目錄
# 3. 指定目標目錄後接來源
cp [選項]... -t 目錄 來源...
環境差異提醒: 互動式 Shell 通常預設別名 cp='cp -i'(覆蓋前詢問),但 Shell 腳本執行時不會載入別名,需顯式加參數控制行為。
| 類別 | 參數 | 長參數 | 說明 |
|---|---|---|---|
| 保留屬性 | -a | --archive | 等同 -dR --preserve=all(保留連結、權限、時間戳、擴充屬性) |
| -p | --preserve=屬性 | 保留模式、擁有者、時間戳;可加 context,links,xattr | |
| -d | 等同 --no-dereference --preserve=links | ||
| 覆蓋控制 | -i | --interactive | 覆蓋前詢問(覆蓋 -n) |
| -n | --no-clobber | 不覆蓋既有檔案(覆蓋 -i) | |
| -f | --force | 目標無法開啟時移除後重試 | |
| -b | --backup[=控制] | 為既有目標建立備份 | |
| 遞迴與連結 | -R, -r | --recursive | 遞迴複製目錄及其內容 |
| -L | --dereference | 總是跟隨符號連結複製目標檔案 | |
| -P | --no-dereference | 不跟隨符號連結(預設) | |
| 特殊功能 | -l | --link | 建立硬連結而非複製內容 |
| --copy-contents | 遞迴時複製特殊檔案內容(如 /proc) |
cp -a /home/user/project /backup/project_$(date +%F)
cp -i -n 來源檔案 目標目錄/
cp -P symlink 目標路徑/
cp -l 大檔案 連結名稱 # 同一檔案系統內有效
cp 複製或 ln -s 建立符號連結rsync -a 或 tar | tar 管線替代深入理解 cp 的參數交互關係(如 -i vs -n、-L vs -P),能避免資料遺失與非預期行為,是系統管理與自動化腳本撰寫的基本功。