rsync无法删除非空目录


10

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

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

我也知道我可以使用--delete-excluded摆脱问题,但这不是我想要的。

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

这也意味着,如果目录在本地不再存在,则即使包含排除的文件,也应将其删除。

是否可以设置rsync来完成此任务?

Answers:


5

使用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

0

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

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

目标:要删除desc上.sh的文件末尾,但是,如果这样做,则无法在desc上删除:rsync -rvz --exclude * .sh --delete -n conkg kg@192.168.31.202:/家庭/公斤/吨

应更改为:测试测试时,请添加-n:rsync -rvz --exclude-from del.txt -n-删除conkg kg@192.168.31.202:/ home / kg / tmp实际删除:rsync -rvz-从del.txt中排除-删除conkg kg@192.168.31.202:/ home / kg / tmp cat del.txt -s * .sh

或:rsync -rvz-排除-s * .sh-删除conkg kg@192.168.31.202:/ home / kg / tmp


-2

只需使用rsync的'--max-size = xx'和'--delete'选项即可。它会自动执行所有操作并满足您的所有要求。


最多是一种解决方法。我想完全跳过mov,avi和cr2文件,因为它们通常很大。但是,我早些时候已经在较快的线上上传的那些内容应该保留。现在的问题是,最大的JPG文件大于最小的CR2文件,因此此解决方案并不理想。我宁愿使用排除功能来过滤文件名。
marlar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.