Linux 使用grep invert函数比较两个md5哈希列表
我使用losetup在Linux中挂载了两个.dd映像,并为这些映像上的每个文件创建了一个哈希值列表:Linux 使用grep invert函数比较两个md5哈希列表,linux,command-line,grep,file-extension,invert,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 /me
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.txt
与winXPimage2.txt
(包含jpeg哈希值)进行比较,并显示所有不匹配的jpg哈希行:
grep -v -f winXPimage1New.txt winXPimage2.txt/*.jpg
grep -v -f .*[.jpg] winXPimage1New.txt winXPimage2.txt
这些命令都不会从第二个图像哈希列表返回jpg哈希值。我只是不确定我到底应该把.jpg文件扩展名放在哪里,因为我对Linux一般来说都是新手。那么你想过滤.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发现得很好。我想你想要diff
。非常感谢你的回复,PP。我使用了你提供的前两个命令,在我的桌面上创建了“only-jpeg1.txt”和“only-jpeg2.txt”文件。唯一的问题是这些文件不包含任何jpg文件及其哈希值。我假设“仅jpeg.txt”文件应仅包含jpeg哈希值?哇!我是个白痴。拉出JPEG时,从grep中删除-v
标志。-v
反转搜索,返回所有不匹配的行。对不起。@Alex说实话,我以前不知道grep有一个-f
标志,所以你教了我一些新东西。这是一个我以前解决过很多次的问题,但是做事情很困难(将SHA1存储到数据库中),而不是像您那样只使用grep。你的方法给我留下了深刻印象。