rsync 无法删除非空目录

mar*_*lar 10 linux rsync

同步我的远程备份时出现错误rsync cannot delete non-empty directory

我知道原因:我排除了一些文件,当 rsync 尝试删除远程目录时,因为它在本地不存在,它不能,因为它不是空的。如果没有排除,目录将被清空。

我也知道我可以通过使用 --delete-excluded 来解决这个问题,但这不是我想要的。

我想跳过上传某些文件(因为它们对于我的上传速度来说太大了),但我想保留那些我已经上传的文件,如果它们存在于本地。如果它们在本地不存在,则应将其删除。--delete-excluded 将在远程端删除它们。

这也意味着如果一个目录在本地不再存在,即使它包含排除的文件也应该被删除。

是否可以设置 rsync 来完成此操作?

miv*_*ivk 7

使用p修饰符:

p 表示规则易腐烂,这意味着它在被删除的目录中被忽略。例如,排除“CVS”和“*.o”等内容的 -C 选项的默认规则被标记为易腐烂,并且不会阻止在源上删除的目录在目标上被删除。

例如,我使用了一个-F选项,它“告诉 rsync 查找已经散布在层次结构中的每个目录的 .rsync-filter 文件,并使用它们的规则来过滤传输中的文件。”

我的.rsync-filter包含这样的行来过滤掉 Mac 留下的这些“粪便”:

-p .DS_Store
-p ._*
Run Code Online (Sandbox Code Playgroud)

如果使用exclude而不仅仅是-,请添加逗号。例如 :

exclude,p .DS_Store
exclude,p Thumbs.db
Run Code Online (Sandbox Code Playgroud)


spa*_*kie -2

只需使用 rsync 的 '--max-size=xx' 和 '--delete' 选项即可。它将自动完成一切并满足您的所有要求。