我必须将同一文件的80个副本的md5sums进行比较,并报告不匹配时的失败。如何在bash中有效地做到这一点?我正在寻找一个优雅的算法来做这件事。

最佳答案

md5sum FILES > MD5SUMS.md5
cut -c1-32 < MD5SUMS.md5 | sort | uniq -c | sort -n

将返回如下内容:
  1 485fd876eef8e941fcd6fc19643e5e59
  1 585fd876eef8e941fcd6fc19643e5e59
  5 385fd876eef8e941fcd6fc19643e5e59

阅读:5个文件有相同的校验和,另外两个文件有“单独”的校验和。我想,大多数人是对的,所以
| tail -1 | cut -c 9-

返回最后一行的校验和。现在过滤所有其他内容(并将各个部分组合在一起):
md5sum FILES > MD5SUMS.md5
grep -v "$(cut -c1-32 < MD5SUMS.md5 | sort | uniq -c | sort -n | tail -1 | cut -c 9-)" MD5SUMS.md5 | cut -c35-

这将打印非多数文件的文件名。

关于linux - 我如何在bash中相互比较80个md5sums,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9284232/

10-13 09:48