在多个 zip 文件中搜索字符串

zig*_*ggy 31 grep solaris zip search

我正在开发 SunOS 5.10。我有一个包含大约 200 个 zip 文件的文件夹。每个 zip 文件中仅包含一个文本文件。我想在所有 zip 文件的所有文本文件中搜索特定字符串。

我试过这个(它在 zip 文件中搜索包含字符串“ORA-”的任何文本文件),但它没有用。

zipgrep ORA-1680 *.zip
Run Code Online (Sandbox Code Playgroud)

在不解压缩 zip 文件的情况下这样做的正确做法是什么?

Noa*_*oah 34

通常不可能在不以一种或另一种方式解压缩压缩文件的情况下搜索压缩文件中的内容。由于 zipgrep 只是一个 shellscript,包装了 unzip 和 egrep 本身,您不妨手动进行:

for file in *.zip; do unzip -c "$file" | grep "ORA-1680"; done
Run Code Online (Sandbox Code Playgroud)

如果您只需要匹配的 zip 文件列表,您可以使用以下内容:

for file in *.zip; do
    if ( unzip -c "$file" | grep -q "ORA-1680"); then
        echo "$file"
    fi
done
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您只能解压缩到标准输出(即到内存),而不是将文件解压缩到磁盘。您当然可以尝试仅grep -a压缩 zip 文件,但根据文件的内容和您的模式,您可能会得到误报和/或漏报。

  • `unzip -c` 将文件解压缩到标准输出。它不会将整个未压缩文件写入其他任何地方。 (2认同)
  • 我的 `unzip` 版本使用 `-p` 来流式传输到管道! (2认同)

dog*_*ane 21

zipgrep需要一个文件。要使其在多个文件中工作,请将其放入循环中:

for i in *.zip
do
   zipgrep ORA-1680 "$i"
done
Run Code Online (Sandbox Code Playgroud)

  • 在一行中,如果匹配也打印 zip 文件名:`for i in *.zip; 做 zipgrep TextToSearch $i && echo $i; 完成` (2认同)