rsync如何对rsync执行校验和

Gri*_*ckz 10 linux bash rsync checksum

使用rsync时有时rsync不会复制完成的所有文件,下面是我使用的代码.它们是一种在rsync之后进行校验和检查的方法,看看是否所有文件都已被复制,如果没有复制,直到所有文件都被复制了?

TEMP="/home/user/temp"
OPTS="-rav -h"

rsync $OPTS --stats user@example.com:/home/user/Local $TEMP
Run Code Online (Sandbox Code Playgroud)

Tom*_*Tom 17

正如uʍopǝpısdn的回答所示,rsync -c或者rsync --checksum可能做你需要的.

-c, - checksum:基于校验和跳过,而不是模态时间和大小

这会强制发送方使用128位MD4校验和对每个常规文件进行校验和.它在初始文件系统扫描期间执行此操作,因为它构建了所有可用文件的列表.接收器然后校验其每个文件的版本(如果它存在并且它具有与其发送方对应的相同大小)以便确定需要更新哪些文件:具有改变的大小或改变的校验和的文件被选择用于传递.由于除了在文件传输期间发生的自动校验和验证之外,还会发生连接两端所有文件的整个文件校验和,因此该选项可能非常慢.

请注意,rsync始终通过检查其整个文件校验和来验证每个传输文件是否在接收端正确重建,但是自动传输后验证与此选项在传输之前无关"此文件是否需要要被更新?" 校验.

对于这种缓慢的担忧现在可能不相关,当你不能或不想依赖修改时间时,这似乎是一个很好的选择.

  • 在 Git 中工作并在具有更改文件的分支之间切换时很有用,这会不断更改您不打算从特定分支发送的文件的更新时间。 (2认同)

sle*_*ica 5

我认为最好通过rsync正确配置来解决这个问题。阅读该man页面:)有选项(比如--checksum这个)。

您也可以自己执行此操作:

  1. findrsync 目录中的所有文件。
  2. xargs md5sum获取所有文件的校验和
  3. md5sum校验和

如果您在两侧(本地/远程)都这样做,您将有一个校验和可供比较。