rsync:排除一个分支中的目录,但不排除其他分支中的目录

rsync: Exclude directory in one branch, but not in other

我想做一个

rsync master slave

具有以下限制:目录 master/foo/xxx 不应被复制,但目录 master/bar/xxx 应被复制。

我不会写

rsync --exclude xxx master slave

因为这也会排除 master/bar/xxx。令我惊讶的是,我也不能使用

rsync --exclude master/foo/xxx master slave

因为它复制了两个 xxx 目录(为什么?)。

当然我可以恢复写两个 rsync:

rsync --exclude xxx master slave
rsync master/bar/xxx slave/bar/xxx

但我想知道这是否不能做得更简单。

正确的命令是这样的:

rsync --exclude /foo/xxx master slave

Include/exclude 以 / 开头的规则是相对于传输的根目录(而不是文件系统的根目录)。

以其他字符开头的规则与每个文件名的末尾相匹配,因此 foo/xxx 也可以工作,但如果在其他地方有 foo ,则可能会匹配您不期望的目录目录树。

您的命令没有工作,因为"master"在传输的根目录之外。