Bash - 比较 2 个文件列表及其 md5 校验和
Bash - Compare 2 lists of files with their md5 check sums
我有 2 个列表,其中包含带有 md5sum 检查的文件。即使文件相同,列表也有不同的路径。我想检查每个文件的 md5 总和。我们正在谈论数以千计的文件,这就是为什么我需要脚本来仅向我显示差异。第一个列表是香草,第二个是文件的当前状态。我想找出哪些文件比原始文件 changed/different。为此,我想比较这两个列表。每行都有 md5 和和文件 location/name。有没有人知道如何做到这一点?如果其中一个列表中有一个额外的文件会怎样?!
带有校验和的第一个文件中的内容示例(vanila 列表):
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[]=$NF; next }!( 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
我有 2 个列表,其中包含带有 md5sum 检查的文件。即使文件相同,列表也有不同的路径。我想检查每个文件的 md5 总和。我们正在谈论数以千计的文件,这就是为什么我需要脚本来仅向我显示差异。第一个列表是香草,第二个是文件的当前状态。我想找出哪些文件比原始文件 changed/different。为此,我想比较这两个列表。每行都有 md5 和和文件 location/name。有没有人知道如何做到这一点?如果其中一个列表中有一个额外的文件会怎样?!
带有校验和的第一个文件中的内容示例(vanila 列表):
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[]=$NF; next }!( 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