我维护一个目录结构,其中包含我定期推送到~50 个主机的目录和文件,这些主机被分为 3 个组,每个组的需求略有不同 - 对几个文件进行了小修改。
因此理想情况下我应该有 4 个目录:
/path/to/sync/common/ <- common files
/path/to/sync/group1/ <- group1 specific only
/path/to/sync/group2/ <- group2 specific only
/path/to/sync/group3/ <- group3 specific only
然后我会运行一个 rsync
rsync -av --overlay /path/to/sync/groupN /path/to/sync/common remotehost:
考虑要传输的文件列表,我想要:
- 任何共同点/添加到文件列表中的东西;然后
- 将 groupN/ 中存在的所有内容添加到列表中,破坏已存在的所有内容
我知道我可以自己填充列表并使用,--files-from=<LIST>
但我宁愿让 rsync 来解决这个问题如果有可能。我想不出一个简单且不笨重的方法来填充列表(指出一个方法可获二等奖!)
答案1
我已经找到了一种可行的方法,即首先在本地合并树木。
TEMPDIR=$(mktemp -d)
cp -r /path/to/sync/common/* $TEMPDIR
cp -r -f /path/to/sync/groupN/* $TEMPDIR
rsync -av $TEMPDIR/* remotehost:
rm -r $TEMPDIR
不过,我还是更喜欢使用 rsync 来进行本地 cp。