Bash - 比较2个文件列表及其md5校验和

时间:2017-01-12 13:36:40

标签: linux bash shell centos md5

我有两个包含md5sum检查文件的列表。即使文件相同,列表也有不同的路径。我想检查每个文件的md5总和。我们正在谈论成千上万的文件,这就是为什么我需要脚本只向我展示差异。第一个列表是vanilla,第二个列表是文件的当前状态。我想找到哪些文件更改/不同于原始文件。为此,我想比较2个列表。在每一行都有md5 sum和文件位置/名称。有没有人知道如何做到这一点?如果其中一个列表中有一个额外的文件,会发生什么?!

带有校验和的第一个文件中的内容示例(vanila list):

df7a0edcb7994581430379db56d8d53b  /home/user/vanila/file-1.php
e1af39e94239a944440ab2925393ae60  /home/user/vanila/file-2.php
ce74e43d24d9c36cd579e932ee94b152  /home/user/vanila/file-3.php
95b7d47ed7134912270f8d3059100e8c  /home/user/vanila/file-4.php

带有校验和的第二个文件中的内容示例(活动列表):

df7a0edcb7994581430379db56d8d53b  /home/user/file-1.php
94b2a24a1fc9883246fc103f22818930  /home/user/file-1.1.php
e1af39e94239a944440ab2925393ae60  /home/user/file-2.php
ce74e43d24d9c36cd579e932ee94b152  /home/user/file-3.php
f5233ee990c50aade7c4e3ab9b4fe524  /home/user/file-4.php

期待结果:

To show me that file-4.php is with different md5 sum.
If shows that there is an extra file (file-1.1.php) it's a bonus!

1 个答案:

答案 0 :(得分:3)

尝试使用Awk这是正确的工具,

awk -F"/" 'FNR==NR{filearray[$1]=$NF; next }!($1 in filearray){printf "%s has a different md5sum\n",$NF}' file2 file1
file4.php has a different md5sum

file2file1如下所示

$ cat file1
df7a0edcb7994581430379db56d8d53b  /home/user/vanila/file-1.php
e1af39e94239a944440ab2925393ae60  /home/user/vanila/file-2.php
ce74e43d24d9c36cd579e932ee94b152  /home/user/vanila/file-3.php
95b7d47ed7134912270f8d3059100e8c  /home/user/vanila/file-4.php

$ cat file2
df7a0edcb7994581430379db56d8d53b  /home/user/file-1.php
94b2a24a1fc9883246fc103f22818930  /home/user/file-1.1.php
e1af39e94239a944440ab2925393ae60  /home/user/file-2.php
ce74e43d24d9c36cd579e932ee94b152  /home/user/file-3.php
f5233ee990c50aade7c4e3ab9b4fe524  /home/user/file-4.php

要查找文件不在一个文件中而不在其他文件中,

awk -F"/" 'FNR==NR{filelist[$NF]=$NF; next;}!($NF in filelist){printf "%s is an extra file",$NF}' file1 file2
file-1.1.php is an extra file