cp — 複製檔案與目錄
複製檔案或目錄到指定位置。
語法
cp [選項] 來源... 目的地
常用選項
| 選項 | 說明 | 範例 |
|---|---|---|
-r, -R, --recursive |
遞迴複製目錄及其所有內容 | cp -r src/ dest/ |
-i, --interactive |
覆蓋前詢問確認,避免意外覆寫 | cp -i file1 file2 |
-p, --preserve |
保留原始檔案的權限、時間戳記、擁有者等屬性 | cp -p file1 file2 |
-a, --archive |
等同 -dpR,歸檔模式,完整保留所有屬性並遞迴複製 | cp -a src/ backup/ |
-u, --update |
只複製來源比目的地新,或目的地不存在的檔案 | cp -u *.txt dest/ |
-v, --verbose |
顯示正在複製的每個檔案 | cp -rv src/ dest/ |
-f, --force |
強制覆蓋目的地檔案,不詢問 | cp -f file1 file2 |
-n, --no-clobber |
不覆蓋已存在的目的地檔案 | cp -n file1 file2 |
-l, --link |
建立硬連結而非複製(節省空間) | cp -l file1 file2 |
-s, --symbolic-link |
建立符號連結而非複製 | cp -s /abs/path link |
使用範例
範例 1:複製單一檔案
將 report.txt 複製為 report_backup.txt(兩檔都存在於當前目錄)。
$ cp report.txt report_backup.txt
範例 2:複製檔案到目錄
將 notes.txt 複製到 ~/Documents/ 目錄下,檔名不變。
$ cp notes.txt ~/Documents/
範例 3:遞迴複製整個目錄
使用 -r 複製整個目錄樹,包含所有子目錄與檔案。
$ cp -r project/ project_backup/
範例 4:歸檔模式複製(保留所有屬性)
使用 -a(等同 -dpR)複製時完整保留權限、擁有者、時間戳記,適合備份用途。
$ cp -a /var/www/html/ /backup/html-$(date +%Y%m%d)/
範例 5:互動模式(避免覆蓋)
使用 -i 在即將覆蓋已存在的目的地檔案時詢問確認。
$ cp -i config.yml /etc/app/config.yml
cp: overwrite '/etc/app/config.yml'?
輸入 y 確認覆蓋,n 跳過。
範例 6:批次複製多個檔案
使用 glob 樣式一次複製多個符合條件的檔案到目的地目錄。
$ cp *.log /var/archive/
範例 7:詳細模式複製(顯示進度)
加上 -v 可看到每個被複製的檔案,適合複製大量檔案時確認進度。
$ cp -rv /etc/nginx/ ~/nginx-backup/
'/etc/nginx/nginx.conf' -> '/home/user/nginx-backup/nginx.conf'
'/etc/nginx/sites-enabled/default' -> '/home/user/nginx-backup/sites-enabled/default'
常見錯誤與排錯
cp: -r not specified; omitting directory 'dirname'
- 原因
- 嘗試複製目錄但未加 -r 選項。
- 解法
- 加上 -r 或 -a 選項進行遞迴複製。
cp: cannot create regular file 'dest': Permission denied
- 原因
- 對目的地路徑沒有寫入權限。
- 解法
- 使用 sudo cp 或調整目的地目錄權限(chmod/chown)。
cp: cannot stat 'source': No such file or directory
- 原因
- 來源檔案不存在,或路徑輸入錯誤。
- 解法
- 先用 ls 確認來源檔案存在,或檢查路徑拼字是否正確。