要求 rsync 删除接收方发送方不存在的文件,接收方除外

Ame*_*ina 31 rsync

我已阅读这些主题:

但是,据我所知(也许我遗漏了一些东西),它们没有涵盖以下问题:

您如何要求rsync复制并删除接收方发送方不存在的文件,但有例外?(例如.hg,即使发送端没有存储库,也不要删除接收端的 mercurial 存储库)。

一种可能?

借用@Richard Holloway 下面的回答。说我有以下几行:

rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
Run Code Online (Sandbox Code Playgroud)

据我了解,这一行将rsync删除发送路径上不存在的接收路径上的所有内容,除了与dont_delete_me. 我现在的问题是:即使发送方没有任何匹配,rsync 是否会在接收方保留dont_delete_me 匹配的文件dont_delete_me

Ric*_*way 35

如果您使用--delete--exclude一起使用排除位置中的内容,即使删除了源文件也不会被删除。

但这引发了文件夹根本不会被删除的问题rsync。因此,您将需要对该文件夹进行另一项rsync工作sync

例如。

rsync -nav /home/richardjh/keepall/ /home/backup/richardjh/keepall/
rsync -nav --exclude=keepall --delete /home/richardjh /home/backup/richardjh
Run Code Online (Sandbox Code Playgroud)

您可以反过来运行这些,但它会删除所有已删除的文件,然后替换它们,效率不高。

你不能把它当作一个班轮。