我使用 bash 将许多文件夹中的许多文件(约 54GB)从一个 ext4 位置复制到另一个位置cp ~/1 ~/2 -d -r -v -i
。然后我想检查所有文件是否都已正确复制,因此我运行了rsync --delete -vturOn ~/1 ~/2
,但 rsync 想要复制所有文件。这是为什么?
PS:我本来想用cp
with -a
,但是用-d
错了。
编辑:答案这里让我使用--itemize-changes
显示>f..t......
所有文件的标志。手册页指出t
平均修改时间不同,文件类型为文件 ( f
),并且仅项目属性正在被修改 ( .
)。这是正确的吗?那么所有将要改变的都是修改时间吗?
编辑:我运行了rsync
(没有-n
),尽管t
修改时间不同,它还是继续再次复制所有文件(实际文件内容),这是出乎意料的,因为 rsync 无论如何都应该进行差异复制,这应该注意吗?
编辑:停止同步并在没有-t
参数的情况下重新运行。现在逐项更改显示“T”而不是t
。如果我希望将来对这些文件使用 rsync,似乎我必须通过 rsync 复制所有文件至少一次。
编辑:我删除了目标文件并使用带-van
参数的 rsync 再次复制了所有内容。
答案1
来自 rsync 文档:
Rsync 使用“快速检查”算法(默认)查找需要传输的文件,该算法查找大小或上次修改时间已发生变化的文件。
此外,当源和目标都是本地时,默认rsync
使用该选项运行。--whole-file
-W, --whole-file
使用此选项时,不使用 rsync 的增量传输算法,而是按原样发送整个文件。当源计算机和目标计算机之间的带宽高于磁盘带宽时(尤其是当“磁盘”实际上是网络文件系统时),如果使用此选项,传输可能会更快。当源计算机和目标计算机都指定为本地路径时,这是默认设置,但前提是没有批量写入选项生效。
我不确定,但听起来你可能想要这个--checksum
选项。
-c, --checksum skip based on checksum, not mod-time & size
请注意,这需要从磁盘读取源文件和目标文件来计算校验和。
更多内容: