在所有压缩文件中查找和搜索


9

我想在硬盘上扫描所有压缩文件集,例如zip,gzip,bzip等,并搜索那些文件类型的内容(例如图像)。杀毒”,所以我相信应该有办法。


@Rinzwind将在存档文件中搜索,而不是在文件列表中搜索。它将查找包含foo但不包含的文件foo.png
terdon

这对于检查拉链炸弹可能会有所帮助!+1
莎拉德·豪塔姆

Answers:


17

最简单的方法是列出存档的内容并查找相关扩展名的文件。例如,使用一个zip文件:

$ zip -sf foo.zip | grep -iE '\.png$|\.jpg$'
  file1.jpg
  file1.png
  file2.jpg
  file2.png

-sf选项指示zip列出存档中包含的文件。然后,grep将在行()的末尾查找a .png或。由于启用了扩展的正则表达式,因此我们可以将其用作OR,并使匹配的大小写不敏感。.jpg$-E|-i

但是,每个存档工具都有一个不同的命令来列出内容。我写了一个脚本,可以处理大多数较流行的脚本。如果将该脚本另存为list_compressed.sh,则可以运行:

list_compressed.sh | grep -iE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$'

那将显示最常见的图像类型。请注意,此方法假定文件类型可以由文件扩展名确定。它不会找到没有扩展名的图像文件,也不会识别扩展名错误的文件。如果没有实际从存档中提取文件并file在每个文件上运行它们,就无法解决。


如果要在硬盘上查找所有包含图像文件的档案,请将以上内容与结合使用find

find / -name '*.gz' -o -name '*.tgz' -o -name '*.zip' -print0 |
    while IFS= read -r -d '' arch; do    
        list_compressed.sh "$arch" | 
            grep -qiE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$' &&
                echo "$arch contains image(s)"
    done

find命令将搜索所有.gz.tgz.zip文件(只要你喜欢,你可以添加任意多的扩展),这些然后通过我的脚本传递。在-qgrep的是正常的输出抑留,什么都不会被打印出来。&& echo仅当grep成功时,才会打印档案的名称。


根据我最初的问题,我想“在硬盘上扫描所有包含图像的压缩文件集(如zip)”。您已经帮助调查了档案本身,但是我只想确定哪些档案包含图像。
2015

@ 6ftDan对不起,我还没有看过原始照片。请随时回滚或重新编辑任何更改帖子含义的编辑。有关如何搜索整个文件系统的信息,请参见更新的答案。
terdon 2015年

太好了,但是既然您不区分大小写地搜索,也许您还希望不区分大小写地进行搜索?
kos 2015年

@kos hmm,这很容易,只需将其更改-name为即可-iname。但是,没有什么意义,许多压缩程序(例如gzip)都需要特定的扩展名。GZ将无法正常工作。
terdon 2015年

3

不如terdon先进,但这可以做到:

将以下代码保存为您的所有代码所在的文件夹,并以finda.sh或您喜欢的其他任何名称:

for file in *.*; do
    if ( 7z l -slt "$file"> /tmp/$file.log); then
       echo $file:; cat /tmp/$file.log | grep -iE 'Path*'> $file.log && cat $file.log
    fi
done

然后在一个目录中所有档案文件都在其中,运行它,这是输出:

./finda.sh 
one.7z:
Path = one/abradabra.png
Path = one/birb.png
three.rar:
Path = three/blah.png
Path = three/qwa0g.jpg
two.zip:
Path = two/whut.png

根据我最初的问题,我想“在硬盘上扫描所有包含图像的压缩文件集(如zip)”。您已经帮助调查了档案本身,但是我只想确定哪些档案包含图像。
2015

@ 6ftDan我认为可以,但是可能要花一些时间。同时,在terdon的帮助下,我对脚本进行了一些改进。
blade19899 2015年

请注意,*.*这只会匹配带有扩展名的文件。此外,这将列出所有文件中的所有档案,你没有测试任何文件类型。
terdon 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.