![rsync dir-merge 受本地和远程过滤器影响](https://linux22.com/image/56475/rsync%20dir-merge%20%E5%8F%97%E6%9C%AC%E5%9C%B0%E5%92%8C%E8%BF%9C%E7%A8%8B%E8%BF%87%E6%BB%A4%E5%99%A8%E5%BD%B1%E5%93%8D.png)
我使用 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
.