对 11.8 GB 的 40000 个项目进行递归 md5sum 检查需要 2 分钟:
ret=$(find "${target}"/ -name ".md5sum" -size +0 | while read aFile; do cd "${aFile%/*}"; md5sum -c ".md5sum"; done | grep -v "OK";)
是否可以进行任何我没有注意到的明显速度改进?
答案1
并不真地。
除非您决定在大小+时间戳匹配时完全放弃检查,否则如果校验和实际匹配,则几乎没有什么可优化的;这些文件都是相同的,但要验证这一点,您实际上必须阅读所有文件,而这需要时间。
md5sum
您可以通过构建包含所有文件的全局 MD5SUMS 文件来减少对单个文件的调用次数。然而,由于瓶颈将是磁盘 I/O,因此速度不会有太大差异......
如果文件确实发生了变化,您可以稍微优化一下。
如果文件大小发生变化,您也可以记录文件大小,而不必检查 md5sum,因为不同的大小将自动意味着更改的 md5sum。
您可以执行基于块的校验和,而不是整个文件校验和,这样如果早期已经存在更改,您就可以停止检查给定文件中的差异。因此,您不必读取整个文件,只需读取第一个更改的块即可。