如何正确配置rsync排除规则?同步远程指定子目录遇异常
解决rsync同步指定子目录的问题
你的问题出在rsync过滤规则的顺序和逻辑上,当前的--include inbox仅能匹配名为inbox的条目,但无法阻止同步用户主目录下的其他内容。要实现只同步每个用户目录下的inbox子目录,排除所有其他文件/目录,需要调整过滤规则的顺序与内容:
正确的命令配置
PARTNER='user1,user2,user3' rsync -rv \ --exclude='*' \ --include='*/inbox/' \ --include='*/inbox/**' \ --exclude='.?*' \ "$REMOTE:$REMOTEHOME/{$PARTNER}" inboxes/
规则解释
--exclude='*':先默认排除所有内容,这是核心前提,确保只有明确被include的内容才会被同步--include='*/inbox/':允许匹配每个用户目录下的inbox目录本身(末尾的/确保仅匹配目录,而非同名文件)--include='*/inbox/**':允许同步inbox目录下的所有文件和子目录(**表示递归匹配目录内所有层级的内容)--exclude='.?*':最后排除所有隐藏文件/目录,保留你原本的需求
额外说明
如果远程用户的inbox目录是隐藏目录(比如.inbox),只需将规则里的inbox替换为.inbox即可。另外要注意,rsync的过滤规则是从上到下依次生效,必须把--exclude='*'放在最前面,否则后续的include规则无法生效。
内容的提问来源于stack exchange,提问作者Skeeve
相关产品推荐
相关产品推荐

