rsync:混合排除和包含过滤器

rsync:混合排除和包含过滤器

以下模式将 .pdf 文件从源复制到目标,工作正常。

rsync -rv --include="*.pdf" --include="*/" --exclude="*" --prune-empty-dirs /source/ ~/destination/

但我想排除文件名中包含 web 的文件不起作用,它甚至将文件 web_profile.pdf 文件复制到目的地,为什么会这样。

rsync -rv --include="*.pdf" --include="*/" --exclude="*web*.pdf" --exclude="*" --prune-empty-dirs /source/ ~/destination/

另外,我不清楚排除特定目录**/(即 2 星和单星)。

有人可以消除我对 rsync 中模式匹配的疑问吗?

--include="*.pdf"matches *pdf,如果我想排除某些目录,例如../web-info/..pdf,我该怎么做?

答案1

--include和选项的顺序--exclude是相关的。

您首先要包含所有文件,因此*.pdf后面的排除永远不会适用。另请注意,包含/排除模式适用于节点名称(文件、目录等),而不适用于路径名,除非模式中*web*.pdf/或;**所以排除无论如何*web*.pdf也不会排除...web.../...pdf

如果您想要所有 PDF,而不是匹配目录下的 PDF,*web*那么这应该可行:

rsync -rv --exclude "*web*/" --include="*.pdf" --include="*/" --exclude="*" --prune-empty-dirs /source/ ~/destination/

这将防止 rsync 递归到匹配的目录*web*,包括所有*.pdf文件,包括所有其他目录,排除所有其他文件。

**在模式中使用 a也可能有效,尽管我更喜欢上面的解决方案:

rsync -rv --exclude "**web*.pdf" --include="*.pdf" --include="*/" --exclude="*" --prune-empty-dirs /source/ ~/destination/

相关内容