rsync 无法排除目录

rsync 无法排除目录

我运行此 cmd 来备份我的文件夹:

$ rsync -av --exclude {/mnt/dati/Film/, /mnt/dati/Scout/} --delete /mnt/dati/ /media/cirelli/HD1TB/backup/dati
sending incremental file list

rsync 的答案是:

rsync: link_stat "/mnt/dati/Scout/}" failed: No such file or directory (2)

但“Scout”目录存在!我不明白我犯了什么错误。即使没有任何错误消息,电影也被复制了!我在执行 rsync 时出了什么问题?

非常感谢大家

(哦,我读过https://download.samba.org/pub/rsync/rsync.html和例子http://www.thegeekstuff.com/2011/01/rsync-exclude-files-and-folders/但仍然找到任何方法来解决..!)

我也尝试过(可以用 CTRL+C 中断):

cirelli@asus:~$ rsync -av --exclude /mnt/dati/Film/ --exclude /mnt/dati/.Trash-1000/ --delete /mnt/dati/ /media/cirelli/HD1TB/backup/dati
sending incremental file list
deleting Documenti/script/
rsync: readlink_stat("/media/cirelli/HD1TB/backup/dati/Documenti/RPi/.2015-05-05-raspbian-wheezy.zip.2sXers") failed: Input/output error (5)
deleting Documenti/RPi/KODI/
deleting Documenti/RPi/berryboot-20130908.zip
deleting Documenti/RPi/2015-05-05-raspbian-wheezy.zip
IO error encountered -- skipping file deletion
.Trash-1000/files/
.Trash-1000/files/2015-05-05-raspbian-wheezy.zip
.Trash-1000/files/berryboot-20130908.zip
.Trash-1000/files/settembre 12.img
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(632) [sender=3.1.1]
rsync: [sender] write error: Broken pipe (32)

答案1

第一个问题出现在您的大括号扩展中{},它由 shell 完成并且rsync仅使用结果。

通过在目录名称之间引入空格,使括号扩展成为无操作,因此rsync选项--exclude变为:

--exclude {/mnt/dati/Film/,

因此 rsync 将排除该文件(或目录){/mnt/dati/Film/,(假设没有这样的文件或目录)并且/mnt/dati/Scout/}已成为要复制的源文件,rsync并且没有这样的文件/目录,因此出现错误消息。

为了解决这个括号扩展问题,您需要删除目录名称之间的空格:

{/mnt/dati/Film/,/mnt/dati/Scout/} ....

或者最好只使用一次公共部分:

/mnt/dati/{Film/,Scout/} ....

但这并不能解决问题,rsync因为--exclude采用了如下模式:

--exclude='foo*bar'

或者

--exclude 'foo*bar'

因此在这种情况下,该目录/mnt/dati/Scout/仍将被视为要复制的源目录。

为了解决这个问题,你也可以使用多个--exclude

rsync -av --exclude=/mnt/dati/Film/ --exclude=/mnt/dati/Scout/ ....

或者将模式保存在文件中并使用:

rsync -av --exclude-from=/file/with/patterns ....

相关内容