rsync如何对rsync执行校验和

时间:2013-04-03 12:43:13

标签: linux bash rsync checksum

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

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

rsync $OPTS --stats user@example.com:/home/user/Local $TEMP

3 个答案:

答案 0 :(得分:16)

正如uʍopǝpısdn的答案暗示的那样,rsync -crsync --checksum可以满足您的需求。

  

-c, - checksum:基于校验和跳过,而非mod-time&大小

     

这会强制发件人使用a校验和每个常规文件   128位MD4校验和。它在初始文件系统中执行此操作   扫描,因为它构建了所有可用文件的列表。收件人   然后校验和每个文件的版本(如果它存在,它有   与发送方对应的大小相同)以决定哪个   文件需要更新:文件大小改变或   选择更改的校验和进行传输。既然这个整个文件   校验和连接两侧的所有文件都在   除了在a期间发生的自动校验和验证   文件的传输,这个选项可能很慢。

     

请注意rsync始终   验证每个传输的文件是否已正确重建   接收方通过检查其整个文件校验和,但那   自动转移后验证与此无关   此选项在转移之前“此文件是否需要更新?”   检查。

现在对这种情况缓慢的担忧可能并不重要,如果你不能或不想依赖修改时间,这似乎是个不错的选择。

答案 1 :(得分:3)

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

你也可以自己做这件事:

  1. find rsync'd目录中的所有文件。
  2. xargs md5sum获取所有文件的校验和
  3. md5sum校验和
  4. 如果你在双方(本地/远程)这样做,你将有一个校验和进行比较。

答案 2 :(得分:1)

使用rsync -Pahn --checksum /path/to/source /path/to/destination | sed '/\/$/d' | tee migration.txt

sed从校验和验证中删除目录。 tee同时输出到屏幕和文件。

请记住,如果文件很大,此方法可能不合适,因为验证将花费很长时间。

Source