即默认rsync
只会比较文件大小和最后修改时间,只要这两者一样,rsync
即认为文件相同。其它属性(包括文件内容)的不同,并不会让rsync
同步该文件!
所以,如果本地文件与远程文件大小一样,修改时间也一样,那么默认情况下,即使文件内容不一样的文件也不同被同步了。
2、用参数控制rsync
的比较算法
通过设置合适的参数,可以控制 rsync 的比较算法。事实上, rsync 有三步来比较文件:
- 比较文件大小。
- 比较文件最后修改日期。
- 比较文件内容,通过
checksum
(比如md5sum
)。
我们可以用参数来控制 rsync 执行上面的哪些步骤:
- 默认的算法只执行 1 和 2。
- 参数
--size-only
只检查 1 ,亦即只要文件一样大,即使修改日期不一样,就认为文件一样,更不会去检查文件内容。 - 参数
--ignore-times
是忽略所有检查,直接认为文件都不一样,然后总是复制文件。 - 参数
--checksum
是在 1 的基础上执行 3 ,比较文件内容。如果文件大小不一样,可以确保内容不一样。如果文件大小一样,那么直接比较文件内容,不会执行 2 中的比较修改日期。该方法最安全,但需要读取两边的文件内容,某些情况下要慢很多(尤其是最后比较出来的文件内容一样的情况)。