我正在尝试使用 rsync 备份机器,在阅读了大量 SO QA 和手册页后,我仍然无法理解包含/排除优先级如何工作,以便我可以传输正确的文件集。混淆具体细节,我正在尝试以下操作:
递归包含:
/home/erik/foo
/home/erik/bar
/home/erik/baz
Run Code Online (Sandbox Code Playgroud)
递归地包含 /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
Run Code Online (Sandbox Code Playgroud)
一些具体问题:
我已经多次看到它建议最初的 --include='*/ 是必要的,尽管我不完全确定为什么。我认为它与确保目录扩展和遵循有关(?)。我还假设最终排除是排除与更高语句不匹配的任何文件?有人可以详细说明这些是否都是必要的,并且它们的立场是否重要?
我不确定目录是否需要前导 /。我已经看到这些路径与请求的 / 传输根相关的提示,这表明它应该类似于 home/erik,但我也没有成功。有人可以扩展一下这是如何工作的吗?
我不确定如果我想包含目录和所有子内容,路径中是否需要后缀 / ?
有人可以详细说明参数的位置是否实际上很重要,即将应用列表中第一个匹配的位置?
有什么理由让我更喜欢 --filter='+ X' 而不是 --include ?排除也一样吗?