我最近发现卷上的一些文件被神秘地截断 - 或者更准确地说,被零长度文件替换。
幸运的是,这些文件是从多个位置硬链接的,并且只有大约一半的链接实际上被具有看似相同属性的零长度文件覆盖。
然而,当我查看备份时,我发现问题在我之前的备份之前就已经发生了。对于有问题的卷,简单的镜像备份应该足够了,因为文件不应该被删除 - 它主要只是追加。但由于该文件实际上并未被删除,所以我不能简单地告诉rsync
不要删除。
有没有办法告诉rsync
不同步本地长度为零但远程端长度非零的文件?
我当然可以简单地编写一些代码来查找零长度文件并排除它们,但这是一个额外耗时的步骤(现在对文件系统进行了两次完整扫描),并且它可以排除合法应该 rsync 的文件(在如果存在预期长度为零的文件)。
答案1
rsync
有一个--min-size
选项:
--min-size=SIZE don't transfer any file smaller than SIZE
因此--min-size=1
足以忽略空文件。
这应该对您有帮助,除非您有必须传输的文件(如果目标端没有零字节大小的文件)。
AFAIK 没有办法告诉 rsync 根据源和目标大小采取特殊操作。
答案2
注意:为了避免使用零长度文件覆盖文件,您需要设置--min-size=1
“不可能有小于零大小的文件”。除非手册页有错误,并且应该说“不要传输任何小于或等于 SIZE 的文件”