同步我的远程备份时出现错误rsync cannot delete non-empty directory。
我知道原因:我排除了一些文件,当 rsync 尝试删除远程目录时,因为它在本地不存在,它不能,因为它不是空的。如果没有排除,目录将被清空。
我也知道我可以通过使用 --delete-excluded 来解决这个问题,但这不是我想要的。
我想跳过上传某些文件(因为它们对于我的上传速度来说太大了),但我想保留那些我已经上传的文件,如果它们存在于本地。如果它们在本地不存在,则应将其删除。--delete-excluded 将在远程端删除它们。
这也意味着如果一个目录在本地不再存在,即使它包含排除的文件也应该被删除。
是否可以设置 rsync 来完成此操作?
使用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)