
我有兩個目錄dirOrig
,dirDest
位於不同的遠端伺服器中。它們都有許多不同深度的子目錄。我現在需要複製特定的文件或擴展名 -file1.txt
遞歸地從dirOrig
到dirDest
。但是,僅當子目錄已存在於dirDest
.
例如,我可以使用 rsync 系統地將特定檔案從來源複製到目標
rsync -zarv --prune-empty-dirs --include "*/" --include="file1.txt" --exclude="*" "dirOrig" "dirDest"
但如何將此副本限制為僅存在於目標 ( dirDest
)中的子目錄
答案1
我不知道任何命令,但我想出的技巧如下。
用於
rsync
複製dirOrig
從server1
到server2
rsync -zarv --prune-empty-dirs --include "*/" \ --include="file1.txt" --exclude="*" "server1:dirOrig" \ "server2:dirOrig"
刪除複製
dirOrig
中不存在的子目錄dirDest
comm
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 )
最後根據校驗和進行 rsync 並刪除 dirOrig 中不存在於 dirDest 中的所有文件
dirDest
,除了dirOrig
file1.txt
rsync -acv --exclude=file1.txt --delete \ server2:dirDest server2:dirOrig