rsync无法删除非空目录

rsync无法删除非空目录

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

我知道原因:我排除了一些文件,当 rsync 尝试删除远程目录(因为它在本地不存在)时,由于它不是空的,所以它无法删除。如果不排除,目录将被清空。

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

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

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

是否可以设置 rsync 来实现这一点?

答案1

使用p修饰符:

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

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

.rsync-filter包含如下行来过滤掉 Mac 留下的“垃圾”:

-p .DS_Store
-p ._*

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

exclude,p .DS_Store
exclude,p Thumbs.db

答案2

您可以使用包含/排除模式的修饰符,在您使用的模式上添加 -s。它告诉 rsync 排除规则仅适用于发送端。

-n :仅检查将按 desc 删除的内容,不删除模式:*.sh desc:/home/kg/tmp

目的:想要删除 desc 上 .sh 结尾的文件,但是如果你这样做,则无法在 desc 上删除:rsync -rvz --exclude *.sh --delete -n conkg[电子邮件保护]:/家/公斤/ tmp

应改为:请在测试时添加-n:rsync -rvz --exclude-from del.txt -n --delete conkg[电子邮件保护]:/home/kg/tmp 真正删除:rsync -rvz --exclude-from del.txt --delete conkg[电子邮件保护]:/home/kg/tmp cat del.txt-s*.sh

或者:rsync -rvz --exclude -s*.sh --delete conkg[电子邮件保护]:/家/公斤/ tmp

答案3

您可以使用此选项强制删除:

--force force deletion of directories even if not empty

答案4

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

相关内容