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