相当于 zipfile 中文件名的 grep -l

相当于 zipfile 中文件名的 grep -l

给定一组 zip 文件,是否有一种简单的方法来仅列出包含名称与给定模式匹配的文件的 zip 文件,参见使用grep -l仅列出内容包含与给定模式匹配的行的文件?

我能想到的最好的办法是

for i in $ZIPFILE_LIST
> do j=$(basename $i)
> unzip -l $i > /tmp/$j
> grep -l $PATTERN /tmp/$j
> rm /tmp/$j
> done

但它相当不靠谱,如果不传递输出grepsed有各种转义问题),它会告诉你你关心哪些文件,但实际上它不会以你可以传递给其他东西的形式提供完整路径。这似乎是一个相当常见的用例,应该有一些更好的现成工具或工具组合来实现它。

答案1

unzip -l files.zip | grep filename

答案2

我认为您想要的是zipgrep,它安装在原版 Ubuntu 中(因此可能安装在您的系统上)。它是一个内部使用 unzip 和 egrep 的 shell 脚本。

答案3

Python zipfile 模块帮助解决你的问题?

例如:

import zipfile

def findfileinzip(source_filename, pattern):
    print(pattern)
    zf = zipfile.ZipFile(source_filename,'r')
    for member in zf.namelist():
        if member.find(pattern) != -1:
            print(member)

相关内容