递归同步特定文件,但仅在目标中存在的子目录中

递归同步特定文件,但仅在目标中存在的子目录中

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

相关内容