使用rsync时有时rsync不会复制完成的所有文件,下面是我使用的代码。它们是一种在rsync之后进行校验和检查的方法,看看是否所有文件都已被复制,如果没有复制,直到所有文件都被复制了?
TEMP="/home/user/temp"
OPTS="-rav -h"
rsync $OPTS --stats user@example.com:/home/user/Local $TEMP
答案 0 :(得分:16)
正如uʍopǝpısdn的答案暗示的那样,rsync -c
或rsync --checksum
可以满足您的需求。
-c, - checksum:基于校验和跳过,而非mod-time&大小
这会强制发件人使用a校验和每个常规文件 128位MD4校验和。它在初始文件系统中执行此操作 扫描,因为它构建了所有可用文件的列表。收件人 然后校验和每个文件的版本(如果它存在,它有 与发送方对应的大小相同)以决定哪个 文件需要更新:文件大小改变或 选择更改的校验和进行传输。既然这个整个文件 校验和连接两侧的所有文件都在 除了在a期间发生的自动校验和验证 文件的传输,这个选项可能很慢。
请注意rsync始终 验证每个传输的文件是否已正确重建 接收方通过检查其整个文件校验和,但那 自动转移后验证与此无关 此选项在转移之前“此文件是否需要更新?” 检查。
现在对这种情况缓慢的担忧可能并不重要,如果你不能或不想依赖修改时间,这似乎是个不错的选择。
答案 1 :(得分:3)
我认为通过正确配置rsync
可以最好地解决这个问题。阅读man
页面:)有选项(例如--checksum
)。
你也可以自己做这件事:
find
rsync'd目录中的所有文件。xargs md5sum
获取所有文件的校验和md5sum
校验和如果你在双方(本地/远程)这样做,你将有一个校验和进行比较。
答案 2 :(得分:1)
使用rsync -Pahn --checksum /path/to/source /path/to/destination | sed '/\/$/d' | tee migration.txt
sed
从校验和验证中删除目录。
tee
同时输出到屏幕和文件。
请记住,如果文件很大,此方法可能不合适,因为验证将花费很长时间。