使用grep invert函数比较两个md5哈希列表

时间:2013-10-27 19:32:39

标签: linux command-line grep file-extension invert

我使用losetup在Linux中安装了两个.dd图像,并为这些图像上的每个文件创建了一个哈希值列表:

md5deep -r  -e * > winXPimage1.txt
md5deep -r  -e * > winXPimage2.txt

这两个哈希列表的外观如下:

d41d8cd98f00b204e9800998ecf8427e  /media/74444E0F444DD510/AUTOEXEC.BAT
17d7055859d99a0d606cfaf17ae38638  /media/74444E0F444DD510/boot.ini
d41d8cd98f00b204e9800998ecf8427e  /media/74444E0F444DD510/CONFIG.SYS
88cf0ff92a4a9fa7bd9b7513b2e9e22b  /media/74444E0F444DD510/Documents and Settings/…
 Etc…

这两个图像包含Windows XP安装文件和标准程序。然而,第二张图片还包含很多图片(jpg,png等)。

我想使用grep来比较我创建的两个哈希列表,并从第二个图像中过滤掉与.jpg文件相关的所有哈希值。

我使用以下命令从第一张图片中删除所有不必要的信息:

cut -f 1 -d ' ' winXPimage1.txt > winXPimage1New.txt

所以现在image1哈希列表如下所示:

d41d8cd98f00b204e9800998ecf8427e
17d7055859d99a0d606cfaf17ae38638
d41d8cd98f00b204e9800998ecf8427e
etc…

我正在尝试使用grep invert命令将winXPimage1New.txtwinXPimage2.txt(包含jpeg哈希值)进行比较,并显示所有不匹配的jpg哈希行:

grep -v -f winXPimage1New.txt winXPimage2.txt/*.jpg
grep -v -f .*[.jpg] winXPimage1New.txt winXPimage2.txt

这些命令都不会从第二个图像哈希列表返回jpg哈希值。我只是不确定我在哪里放置.jpg文件扩展名,因为我对Linux一般都不熟悉。

1 个答案:

答案 0 :(得分:2)

所以你想过滤.jpg文件吗?

首先,您可以先在哈希列表中过滤.jpg个文件,例如

grep -E '\.[jJ][pP][eE]?[gG]$' winXPimage1.txt >only-jpeg1.txt
grep -E '\.[jJ][pP][eE]?[gG]$' winXPimage2.txt >only-jpeg2.txt

然后在第一个系统上获取md5列表:

cut -f 1 -d ' ' only-jpeg1.txt > only-jpeg1-md5only.txt

最后尝试倒置搜索?

grep -v -f only-jpeg1-md5only.txt only-jpeg2.txt

更新:必须编辑,因为前两个示例行有-v个标记,我绝对不想要。很好地发现了@Alex。