如何使用 rsync 的包含和排除优先级?
How to use include and exclude precedence with rsync?
我正在尝试使用 rsync 备份一台机器,在阅读了大量 SO QA 和手册页之后,我仍然无法理解 include/exclude 优先级的工作原理,因此我可以传输正确的文件集.混淆具体细节,我正在尝试以下操作:
递归包含:
/home/erik/foo
/home/erik/bar
/home/erik/baz
递归地包含 /git
,但 排除 一些特定的子目录,例如 /git/src/github.com/foo
和 /git/src/github.com/bar
。
到目前为止,我 认为 的 rsync 命令应该可以完成此操作。它没有,我已经尝试了很多以不同方式失败的变体:
rsync -am \
--include='*/' \
--include='/home/erik/foo' \
--include='/home/erik/bar' \
--include='/home/erik/baz' \
--include='/git' \
--exclude='/git/bin' \
--exclude='/git/src/github.com/foo' \
--exclude='/git/src/github.com/bar' \
--exclude='*' \
/ nfs.example.com:/data/pool/backup/laptop
一些具体问题:
我看到它多次建议初始 --include='*/
是必要的,尽管我不完全确定为什么。我收集到它与确保目录被扩展和跟随(?)有关。我还假设最终排除是什么排除了与更高语句不匹配的任何文件?有人可以详细说明这两者是否都是必要的,它们的地位很重要吗?
我不确定目录是否需要前导 /
。我看到这些路径是相对于 /
的请求传输根的提示,这表明它应该类似于 home/erik
,但我也没有成功。有人可以详细说明这是如何工作的吗?
如果我想包含目录和所有子内容,我不确定路径中是否需要后缀 /
?
有人可以详细说明参数的位置是否真的很重要,即应用列表中第一个匹配的位置吗?
有什么理由让我更喜欢 --filter='+ X'
而不是 --include
?排除也一样吗?
我不确定是否有更原生的方式来交叉 post 一个答案,但我在 Stack Exchange 上询问并得到了 this excellent answer that solved what I was trying to do perfectly, with context。
我正在尝试使用 rsync 备份一台机器,在阅读了大量 SO QA 和手册页之后,我仍然无法理解 include/exclude 优先级的工作原理,因此我可以传输正确的文件集.混淆具体细节,我正在尝试以下操作:
递归包含:
/home/erik/foo
/home/erik/bar
/home/erik/baz
递归地包含 /git
,但 排除 一些特定的子目录,例如 /git/src/github.com/foo
和 /git/src/github.com/bar
。
到目前为止,我 认为 的 rsync 命令应该可以完成此操作。它没有,我已经尝试了很多以不同方式失败的变体:
rsync -am \
--include='*/' \
--include='/home/erik/foo' \
--include='/home/erik/bar' \
--include='/home/erik/baz' \
--include='/git' \
--exclude='/git/bin' \
--exclude='/git/src/github.com/foo' \
--exclude='/git/src/github.com/bar' \
--exclude='*' \
/ nfs.example.com:/data/pool/backup/laptop
一些具体问题:
我看到它多次建议初始
--include='*/
是必要的,尽管我不完全确定为什么。我收集到它与确保目录被扩展和跟随(?)有关。我还假设最终排除是什么排除了与更高语句不匹配的任何文件?有人可以详细说明这两者是否都是必要的,它们的地位很重要吗?我不确定目录是否需要前导
/
。我看到这些路径是相对于/
的请求传输根的提示,这表明它应该类似于home/erik
,但我也没有成功。有人可以详细说明这是如何工作的吗?如果我想包含目录和所有子内容,我不确定路径中是否需要后缀
/
?有人可以详细说明参数的位置是否真的很重要,即应用列表中第一个匹配的位置吗?
有什么理由让我更喜欢
--filter='+ X'
而不是--include
?排除也一样吗?
我不确定是否有更原生的方式来交叉 post 一个答案,但我在 Stack Exchange 上询问并得到了 this excellent answer that solved what I was trying to do perfectly, with context。