问题描述
我有348个zip文件,我想找到其中一个zip文件,unzip -l
无法与通配符一起使用吗?
如何通过压缩文件中包含的所有文件的合并列表列出所有.zip
文件和grep
的内容?
最佳思路
在这里使用zipinfo
是一个很好的解决方案。但是,通常,只要您想将命令应用于文件列表并且该命令不接受文件列表,就可以使用for
循环:
for file in *.zip; do
unzip -l "$file"
done \
| grep "\.zip\|setup"
如果您要搜索的文件中包含空格,例如:your file
,则在grep正则表达式中,您需要使用反斜杠对每个空格进行转义,例如grep "\.zip\|your\ file"
。
次佳思路
您可以使用zipinfo
。它包含在默认的Ubuntu安装中。有关更多信息,请检查manual page。
例如,要在当前目录的一堆zip文件中查找模式setup
,请使用以下命令:
find ./ -iname *zip 2> /dev/null -print0 | xargs -0 zipinfo | grep setup
第三种思路
要列出zip存档中的文件,可以使用以下命令。
unzip -l
要grep压缩的存档,您应该使用为使用该类型的存档格式而构建的压缩存档实用程序。
对于zip档案:
zipgrep --help
usage: zipgrep [egrep_options] pattern zipfile [members...]
Uses unzip and egrep to search the zip members for a string or pattern.
对于tar归档文件:
zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.
OPTIONs are the same as for 'grep'.
还有一些其他工具也可用于存档。您可以将输出放入grep中以执行相同的操作。
zcat
zcat my.archive.zip | grep "some text"
或者您可以使用这些工具的搜索功能
zless
zmore