首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Linux cp -i 複製目錄不提示覆蓋:-r 參數行為解析與正確操作

     編輯:程式設計疑難解答

現象:`cp -ri dir1 dir2` 目標已存在同名目錄,卻不提示「是否覆蓋」。

原因:目錄複製語意是「合併」而非「覆蓋」

  • `cp -r dir1 dir2` 會將 `dir1` **整個目錄樹遞歸複製到 `dir2` 內部** (即 `dir2/dir1/...`)。
  • 若 `dir2` 下已有 `dir1`,則對 `dir1` 內的**檔案**逐一判斷:
    – 目標不存在 → 直接複製。
    – 目標存在 → **才會提示 `-i` 確認覆蓋該檔案**。
  • **目錄本身不會被視為單一檔案覆蓋**,因此不提示「覆蓋目錄」。

圖解

來源:dir1/
        ├─ a.txt
        └─ b.txt

目標:dir2/
        └─ dir1/
            └─ a.txt   (已存在)

執行 cp -ri dir1 dir2
→ 進入 dir2/dir1/
   a.txt 存在 → 提示覆蓋
   b.txt 不存在 → 直接複製
結果:dir2/dir1/ 同時擁有 a.txt(新) 與 b.txt

若想「整個目錄覆蓋」而非合併


# 1. 先刪除目標目錄再複製
rm -rf dir2/dir1
cp -r dir1 dir2

# 2. 或用 rsync 同步刪除多餘檔案
rsync -av --delete dir1/ dir2/dir1/

關鍵口訣

「`cp -r` 複製目錄是**合併內容**,`-i` 只針對**檔案級衝突**提示;要整目錄覆蓋,請先刪後複製或用 `rsync --delete`。」

理解這語意差異,備份腳本就不會漏檔或誤覆蓋。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved