我正在开发 SunOS 5.10。我有一个包含大约 200 个 zip 文件的文件夹。每个 zip 文件中仅包含一个文本文件。我想在所有 zip 文件的所有文本文件中搜索特定字符串。
我尝试了这个(它搜索 zip 文件中包含字符串“ORA-”的任何文本文件),但它不起作用。
zipgrep ORA-1680 *.zip
在不解压 zip 文件的情况下执行此操作的正确做法是什么?
答案1
通常,如果不以某种方式解压缩压缩文件,则无法搜索压缩文件中的内容。由于 zipgrep 只是一个 shellscript,包装了 unzip 和 egrep 本身,因此您也可以手动执行:
for file in *.zip; do unzip -c "$file" | grep "ORA-1680"; done
如果您只需要匹配的 zip 文件列表,您可以使用类似以下内容:
for file in *.zip; do
if ( unzip -c "$file" | grep -q "ORA-1680"); then
echo "$file"
fi
done
这样,您只需解压缩到标准输出(即内存),而不是将文件解压缩到磁盘。您当然可以尝试仅使用grep -a
zip 文件,但根据文件的内容和您的模式,您可能会得到误报和/或漏报。
答案2
zipgrep
需要一个文件。要使其在多个文件中工作,请将其放入循环中:
for i in *.zip
do
zipgrep ORA-1680 "$i"
done