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

标签 linux bash shell centos md5

我有 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!

最佳答案

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

关于linux - Bash - 比较 2 个文件列表及其 md5 校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41614641/

相关文章:

linux - 嵌入式Linux : SC16IS752 buffer overflow

linux - 获取更改所有权 '/var/log/logstash' : Operation not permitted

使用 Mongo CSFLE (mongodb-crypt) 时/tmp 安装为 noexec 时出现 java.lang.UnsatisfiedLinkError

python - 读取输出日志文件,并使用 bash/python 脚本打印所有唯一的文件路径

php - Bash echo-pipe 进入 Mysql shell 失败

c++ - 使用动画变换/旋转 QGraphicsItem Qt,C++

python - 根据有趣单词的字典从电子邮件列表中识别最常见的单词

bash - 替换 sh 中的源代码

php - Shell 运行/执行带参数的 php 脚本

bash - 开始时使用 echo -n 命令的有趣行为