cp 是 Linux 最基礎的複製指令,但其豐富參數常被忽略。精通 cp 可精確控制屬性保留、覆蓋行為、備份機制、稀疏檔處理等,是 Shell 腳本撰寫與系統管理的基本功。

語法
cp [選項]... 來源 目標
cp [選項]... 來源... 目錄
核心參數分類
覆蓋與互動控制
| 參數 | 長參數 | 行為 |
-i | --interactive | 覆蓋前詢問 |
-n | --no-clobber | 不覆蓋既有檔案 |
-f | --force | 目標無法開啟時移除重試 |
-b | --backup | 覆蓋前建立備份 |
-S | --suffix=後綴 | 自訂備份後綴(預設 ~) |
-V | --backup=控制方式 | 備份命名規則 (numbered, simple) |
屬性保留
| 參數 | 長參數 | 保留屬性 |
-p | --preserve=mode,ownership,timestamps | 模式、擁有者、時間戳 |
-a | --archive | 等於 -dR --preserve=all(含連結、擴展屬性、ACL、SELinux 內容) |
--preserve=屬性清單 | | 自訂保留:mode,ownership,timestamps,links,context,xattr,all |
符號連結處理
| 參數 | 行為 |
-d | 等於 --no-dereference --preserve=links,複製連結本身而非目標 |
-L | 總是跟隨符號連結複製目標檔案 |
-P | 不跟隨符號連結(預設) |
-H | 僅跟隨命令列參數中的符號連結 |
遞迴與結構
-R, -r, --recursive:遞迴複製目錄樹。
實戰範例集
| 需求 | 指令 |
| 僅來源較新才複製 | cp -u -v file1 file2 |
| 互動式複製 | cp -i file1 file2 |
| 強制覆蓋 | cp -f file1 file2 |
| 複製目錄樹 | cp -R dir1 dir2 |
| 多檔+目錄複製到目標目錄 | cp -R file1 file2 file3 dir1 dir2 |
| 保留屬性複製 | cp -p a.txt tmp/ |
| 保留目錄結構複製 | cp -P /var/tmp/a.txt ./temp/ |
| 建立備份(預設 ~) | cp -b a.txt tmp/ |
| 備份後綴 ~1~ 格式 | cp -b -V t a.txt /tmp |
| 自訂備份後綴 _bak | cp -b -S _bak a.txt /tmp |
進階技巧
- 稀疏檔處理:
cp --sparse=always src dst 保留稀疏特性,節省空間。
- 複製到多個目標:
tee 配合 cp 或使用 find -exec cp {} dir1 \; -exec cp {} dir2 \;。
- 效能優化:大量小檔用
tar cf - src | (cd dest && tar xf -) 或 rsync -a 更快。
熟記核心參數組合,讓 cp 成為精準可控的檔案操作利器。