rsync dir-merge 受本地和远程过滤器影响

rsync dir-merge 受本地和远程过滤器影响

我使用 rsync 和 --delete 将文件上传到网络服务器。有些文件我想排除,因为它们是配置文件。我正在使用“dir-merge”过滤器,这样我就可以将 .rsync-filter 文件分散在我的目录中,以排除配置/特殊文件。

这看起来很简单,但是我一直遇到问题

经过大量调查后,我的问题似乎是,如果我使用 .rsync-filter 在本地排除文件,该文件仍然会从远程删除,除非遥控器上已经有相应的 .rsync-filter 。

这在实践中意味着,如果我(本地)创建 .rsync-filter 来排除文件,rsync 仍会从远程删除该文件。但它也会将 .rsync-filter 复制到远程,所以下次我尝试它时,它正确排除。

所以我的问题是(有点广泛)我的说法正确吗?手册页在哪里提到了这一点?这一切对我来说似乎有点违反直觉!

哦,还有,如果是这种情况,“e”merge|dir-merge 修饰符有什么用? (“e”修饰符从传输中排除合并文件)。当然,“e”修饰符使得 rsync 更有可能不会达到您的预期?

答案1

在回答我自己的问题时,我无法理解 rsync 是如何工作的!

基本上我认为本地 rsync 运行了整个过程 - 它主要执行除了接收器决定删除哪些内容之外的情况。这样做的一个副作用是,如果使用每个目录的合并文件,则接收者将不会意识到这些,直到合并文件本身被上传。

我最初的想法是首先运行 rsync没有删除,使合并文件同步,然后重新运行 rsync删除以确保事情正常运行。但事实证明--delete-after解决了这个问题。

另一件让我感到困惑的事情是,如果您使用--delete-after然后--dry-run它仍然会删除排除的文件,因为它是一个空运行,接收器仍然不知道(到目前为止)未同步的合并文件中的过滤规则。

最后,dir-merge 上的“e”修饰符将排除合并文件的上传,因此我得出结论,与--delete!

答案2

您不想排除这些文件,而是想保护它们。即不使用- filename但使用P filename.

相关内容