遞歸同步特定文件,但僅在目標中存在的子目錄中

遞歸同步特定文件,但僅在目標中存在的子目錄中

我有兩個目錄dirOrigdirDest位於不同的遠端伺服器中。它們都有許多不同深度的子目錄。我現在需要複製特定的文件或擴展名 -file1.txt遞歸地從dirOrigdirDest。但是,僅當子目錄已存在於dirDest.

例如,我可以使用 rsync 系統地將特定檔案從來源複製到目標

rsync -zarv  --prune-empty-dirs --include "*/"  --include="file1.txt" --exclude="*" "dirOrig" "dirDest"

但如何將此副本限制為僅存在於目標 ( dirDest)中的子目錄

答案1

我不知道任何命令,但我想出的技巧如下。

  1. 用於rsync複製dirOrigserver1server2

    rsync -zarv --prune-empty-dirs --include "*/" \ --include="file1.txt" --exclude="*" "server1:dirOrig" \ "server2:dirOrig"

  2. 刪除複製dirOrig中不存在的子目錄dirDestcomm

    comm -23 <( cd server2:dirOrig && find -mindepth 1 -type d | sort ) \ <( cd server2:dirDest && find -mindepth 1 -type d | sort ) \ | ( cd server2:dirOrig && xargs rm -rf )

  3. 最後根據校驗和進行 rsync 並刪除 dirOrig 中不存在於 dirDest 中的所有文件dirDest,除了dirOrigfile1.txt

    rsync -acv --exclude=file1.txt --delete \ server2:dirDest server2:dirOrig

相關內容