Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用grep invert函数比较两个md5哈希列表_Linux_Command Line_Grep_File Extension_Invert - Fatal编程技术网

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

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

我使用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.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。你的方法给我留下了深刻印象。