【问题标题】:Bash - Compare 2 lists of files with their md5 check sumsBash - 将 2 个文件列表与其 md5 校验和进行比较
【发布时间】:2017-05-27 15:31:17
【问题描述】:

我有 2 个列表,其中包含带有 md5sum 检查的文件。即使文件相同,这些列表也具有不同的路径。我想检查每个文件的 md5 总和。我们正在讨论数千个文件,这就是为什么我需要脚本来只显示差异。第一个列表是原版,第二个是文件的当前状态。我想找出哪些文件已更改/与原始文件不同。为此,我想比较这两个列表。每行都有 md5 总和和文件位置/名称。有人知道怎么做吗?如果其中一个列表中有一个额外的文件会发生什么?!

带有校验和的第一个文件中的内容示例(普通列表):

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!

【问题讨论】:

  • 提供输入文件和你需要的相同输出
  • @Inian 添加了文件内容的示例,也添加了预期的结果!

标签: linux bash shell centos md5


【解决方案1】:

尝试使用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

【讨论】:

  • 这就像一个魅力!谢谢!但是,我正在考虑另一种方法来向我展示是否有任何额外文件。一旦我拥有它,我会发布它!再次感谢您的快速响应!
  • @SasnycoN:很高兴为您提供帮助!
  • 更新也正在运行。我的另一种方法是获取“活动列表”(file2)并使用sed 使用“Vanilla 列表”(file1)中的路径更新其路径。之后运行以下md5sum -c --quiet file2 这将在原版文件上运行,并将显示是否存在具有不同 md5 和的文件以及是否存在在原版中找不到的文件。
  • @SasnycoN:如果您能找到自己的解决方案,那就太好了!
  • 我主要关心的是哪一个会更快,资源更少,但这会在一些测试后知道。 ;) 再次感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多