我运行此 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 ....