我有两个目录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