我有2个列表与他们的md5sum检查文件。 即使文件相同,列表也有不同的path。 我想检查每个文件的md5总和。 我们正在谈论数以千计的文件,这就是为什么我需要脚本来显示我只有差异。 第一个列表是香草,第二个是文件的当前状态。 我想find哪些文件被改变/不同于原来的。 要做到这一点,我想比较两个列表。 每行都有md5总和和文件位置/名称。 有没有人有一个想法如何做到这一点? 如果在其中一个列表中有一个额外的文件,会发生什么?
第一个文件中带有校验和(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!
使用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
其中, file2
和file1
如下所示
$ 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