您如何让 rsync 从文件中加载(完整规则,不限于 --include-from)过滤规则列表?

Tyl*_*ick 4 rsync

rsync有多种选项可以从文件中读取各种配置,这样您就不必将一堆个人--include--exclude选项链接在一起。所有这些选项(据我所知)从本地计算机上的文件中读取: --exclude-from=FILE --include-from=FILE --files-from=FILE

文档--files-from=FILE甚至澄清您可以将它与本地或远程文件一起使用:

此外,如果在文件前面指定“host:”(主机必须与传输的一端匹配),则可以从远程主机而不是本地主机读取 --files-from 文件。作为快捷方式,您可以仅指定前缀“:”来表示“使用传输的远程端”。

我想知道的是哪里或什么是等价物--filter?我们有--include--include-from; --exclude--exclude-from。但在哪儿--filter-from(或者最接近的等价物是什么?)

本节上包含/排除模式规则给出了一个使用的模式规则列表中,就好像它们是包含在文件的例子...

          + /some/
          + /some/path/
          + /some/path/this-file-is-found
          + /file-also-included
          - *
Run Code Online (Sandbox Code Playgroud)

但我能找到的在文件中使用它们的唯一提及是使用从 amerge或加载的文件dir-merge

          merge, . specifies a merge-file to read for more rules.
          dir-merge, : specifies a per-directory merge-file.
Run Code Online (Sandbox Code Playgroud)

我找不到任何提及它是指本地主机还是远程主机上的合并文件,但从我到目前为止的尝试来看,它似乎只适用于远程主机上的文件。

use*_*686 5

这正是选择:

rsync --filter "merge /some/filterlist.conf"
Run Code Online (Sandbox Code Playgroud)

(注意如何-F是 . 的别名--filter "dir-merge /.rsync-filter"。)

merge文件是从本地(客户端)系统读取的(除非您使用 明确地将选项传递给服务器-M)。如果源是远程的,所有过滤规则都会自动发送给它。

同时dir-merge始终应用于source,无论是否本地。(手册页:“必须在发送方创建这些每目录规则文件,因为正在扫描发送方以获取要传输的可用文件。”)

  • 感谢您的回答,@grawity!我终于有机会测试一下,发现你关于“merge”的说法是对的,这让我很高兴。事实证明,我的问题更多地与需要在合并文件中包含完整的绝对路径有关。一旦我解决了这个问题,“--filter“merge merge-file””选项就工作得很好。 :) (2认同)