我正在编写一些复杂的 rsync 脚本,我真的很想了解我可以使用哪些选项。一般来说,手册页是获取信息的最佳场所,内容密集而精确。一个值得注意的遗漏是show
和hide
过滤器的描述。它们出现在本节的下表中FILTER RULES
:
排除, -指定排除模式。 包括,+指定包含模式。 合并,。指定合并文件来读取更多规则。 目录合并,:指定每个目录的合并文件。 隐藏,H指定在传输过程中隐藏文件的模式。 显示,S与模式匹配的文件不会被隐藏。 保护,P指定保护文件免遭删除的模式。 风险,R与该模式匹配的文件不受保护。 清除, !清除当前包含/排除列表(不带参数)
唯一的其他参考是在规则修饰符描述部分:
s 用于表示该规则适用于发送方。当 规则影响发送方,它阻止文件被传输 默认规则对双方均有效,除非 --删除排除 被指定,在这种情况下默认规则变为 仅限发送方。另请参阅隐藏 (H) 和显示 (S) 规则,它们是 指定发送方包含/排除的替代方法。
这似乎表明它们是相同的,但仅限于发送方。这是唯一的区别吗?这意味着什么?它只影响删除的处理方式吗?
答案1
我在这里找到了 Michal Soltys 对这个问题的有用答案:https://lists.samba.org/archive/rsync/2008-November/022027.html
马修·摩纳哥写道:
过滤规则中的排除和隐藏有什么区别?
通常情况下,“隐藏”仅由发送方解释,文件永远不会显示在发送给接收方的文件列表中。“排除”既是“隐藏”(发送方),又是“保护”(接收方),因此接收方不会删除不会显示在文件列表中的文件(如果您使用任何可用的删除选项)。使用单独的“P”和“H”,以及“S”和“R”(分别是发送方和接收方的“包含”),您可以创建相当巧妙的规则。
当在守护进程模式下的 rsyncd.conf 过滤器中使用“隐藏”时,其工作方式可能会略有不同。当 rsync 守护进程作为发送方运行时,“隐藏”将照常运行,但当它作为接收方运行时 - 它也将被解释(通常接收方不会)并且不允许对与所用通配符匹配的文件进行任何更新。“保护”和“排除”也是如此。简而言之 - 功能从“不删除”扩展到“不更新或删除”。
简而言之,主要区别在于,使用排除时,文件不会被发送,但接收方会收到有这样的文件的信息,如果使用其中一个删除选项,则不应删除它。另一方面,当文件被隐藏时,发送方会完全忽略它,这意味着接收方对文件的存在一无所知。
换句话说,当您排除某个文件时,它受到保护,而当您隐藏它时,它不受保护。(除非您使用 覆盖此行为--delete-excluded
。)