如何比较包含多个md5校验和的两个文件以确定更改的文件?

Modified on: Sun, 10 Jun 2018 03:20:23 +0800

我有两个文件MD1MD2

MD1包含md5sums:

5f31caf675f2542a971582442a6625f6  /root/md5filescreator/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30  /root/md5filescreator/hash2.txt
1364cdba38ec62d7b711319ff60dea01  /root/md5filescreator/hash3.txt

其中hash1hash2hash3是文件夹md5filescreator中的三个文件。

类似地MD2包含:

163559001ec29c4bbbbe96344373760a  /root/md5filescreators/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30  /root/md5filescreators/hash2.txt
1364cdba38ec62d7b711319ff60dea01  /root/md5filescreators/hash3.txt

这些文件位于md5filescreators文件夹中。

我想将md5filescreator中的校验和与md5filecreators中相应文件的校验和进行比较。

对于具有相同校验和的文件,shell脚本应返回确定,对于不具有相同校验和的文件,FALSE将返回确认

可以使用md5sum --check来完成(因为它通常会检查只有1个MD5文件中的任何更改)吗?

作者:muru,swapedoc

最佳答案

  

我想知道是否可以使用md5sum --check完成此操作(因为它通常仅检查1个MD5文件中的任何更改)。

不,它不能。

md5sum --check用于读取输入文件第二列中每个文件的路径,并再次检查第一列上报告的校验和的MD5校验和;如果要直接比较两个文件中的校验和,则必须比较文本文件。

使用paste + AWK,你可以这样做:

paste file1 file2 | awk '{x = $1 == $3 ? "OK" : "FALSE"; print $2" "x}'
  • paste file1 file2:在file1的第N行加入file2的第N行;
  • awk '{x = $1 == $3 ? "OK" : "FALSE"; print $2" "x}':如果第一个字段等于第三个字段(即MD5总和匹配),则将“OK”分配给x,否则将“FALSE”分配给x并打印第二个字段(即文件名),后跟x的值。
% cat file1
5f31caf675f2542a971582442a6625f6 /root/md5filescreator/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30 /root/md5filescreator/hash2.txt
1364cdba38ec62d7b711319ff60dea01 /root/md5filescreator/hash3.txt
% cat file2
163559001ec29c4bbbbe96344373760a /root/md5filescreators/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30 /root/md5filescreators/hash2.txt
1364cdba38ec62d7b711319ff60dea01 /root/md5filescreators/hash3.txt
% paste file1 file2 | awk '{x = $1 == $3 ? "OK" : "FALSE"; print $2" "x}'
/root/md5filescreator/hash1.txt FALSE
/root/md5filescreator/hash2.txt OK
/root/md5filescreator/hash3.txt OK
作者:,kos

相关问答

添加新评论