在Linux中,rsync同步時,如何刪除目標資料多出來的資料,即源上不存在,但目標卻存在的檔案或者目錄?

黄嘉波發表於2024-07-05

在Linux中,rsync命令是一個非常強大且靈活的工具,用於檔案和目錄的同步。當使用rsync進行同步時,如果希望刪除目標目錄中那些不再存在於源目錄中的檔案或目錄,你可以使用--delete選項。

下面是一些關於如何使用--delete選項的詳細說明:

1. 使用--delete選項

當你在rsync命令中加入--delete選項時,它會在同步完成後檢查目標目錄,並刪除那些在源目錄中沒有對應檔案或目錄的條目。這有助於保持目標目錄與源目錄的一致性。

2. 基本語法
rsync [options] source-directory/ target-directory/
3. 新增--delete選項
rsync -av --delete source-directory/ target-directory/

這裡:

  • -a 表示歸檔模式,它保留符號連結、檔案許可權、屬主、屬組等屬性。
  • -v 是詳細模式,它會顯示詳細的同步過程。
  • --delete 指定刪除目標目錄中多餘的檔案。
4. 注意事項
  1. 安全性:使用--delete時要小心,因為它可能會永久刪除檔案,如果沒有備份,這些檔案將無法恢復。最好先測試同步,確認無誤後再執行刪除操作。

  2. 幹執行模式:在實際執行之前,可以使用--dry-run選項來預覽rsync將會做什麼,而不實際執行任何更改。

    rsync -avn --delete source-directory/ target-directory/
    
  3. 排除某些檔案:如果你不想刪除特定的檔案或目錄,可以使用--exclude選項來指定。

    rsync -av --delete --exclude='*.log' source-directory/ target-directory/
    
  4. 遞迴刪除:預設情況下,rsync會遞迴地處理目錄。確保你想要遞迴刪除所有子目錄中的額外檔案。

  5. 效能考慮:在處理大量檔案時,--delete可能會消耗較多資源和時間。可以考慮使用--delete-after選項,在同步完成後再刪除,這樣可以避免在同步過程中刪除檔案的開銷。

  6. 遠端同步:如果目標或源是遠端主機上的目錄,你需要使用正確的遠端shell程式(如ssh),並且指定主機和路徑。

    rsync -avz --delete user@remote-host:/path/to/source/ /local/path/to/target/
    

綜上所述,請根據你的具體需求調整上述命令和選項。在生產環境中使用--delete前,務必確保你理解其行為並採取適當的預防措施。

相關文章