![手动传输的文件的指纹是否不同 - 所以 rsync 无法将它们识别为相同的文件?](https://linux22.com/image/220936/%E6%89%8B%E5%8A%A8%E4%BC%A0%E8%BE%93%E7%9A%84%E6%96%87%E4%BB%B6%E7%9A%84%E6%8C%87%E7%BA%B9%E6%98%AF%E5%90%A6%E4%B8%8D%E5%90%8C%20-%20%E6%89%80%E4%BB%A5%20rsync%20%E6%97%A0%E6%B3%95%E5%B0%86%E5%AE%83%E4%BB%AC%E8%AF%86%E5%88%AB%E4%B8%BA%E7%9B%B8%E5%90%8C%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我怀疑我已经知道这个问题的答案,但我想确认一下。我手动将文件和文件夹从一台虚拟机传输到另一台虚拟机,因为当时我还没有正确理解 rsync。现在,当我通过运行将旧虚拟机(例如)上的文件夹中的文件[email protected]:/home/myoldfolder
与新虚拟机(例如)上完全相同(手动传输)的文件进行比较时[email protected]:/home/mynewfolder
rsync -a -v -c --dry-run [email protected]:/home/myoldfolder /home/mynewfolder
rsync 在增量文件列表中显示相同的文件。
相反,当我使用 rsync 将相同的文件同步到新虚拟机上的另一个新文件夹,然后重复比较时,增量文件列表中没有显示任何文件,大概是因为 rysnc 将它们识别为完全相同的文件。
这是因为如果文件未使用 rsync 同步,文件指纹会发生变化吗?我希望我的问题很清楚。
谢谢!
答案1
为了识别文件中的更改,rsync
依赖于
- 文件存在(传输目标上不存在的文件)
- 尺寸
- 修改时间
如果其中任何一个不匹配,则传输将完成。现在,如果您“手动”复制,具体而言,目标系统上可能不会维护修改时间。
您可以-c
在 rsync 中使用 例如 来强制基于校验和的比较(由于每个文件在任一侧都进行校验和,所以速度很慢),--size-only
跳过修改时间测试,或者-u
仅更新,即不触及目标系统上较新的文件。