尝试 ugrep

尝试 ugrep

我正在开发 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 -azip 文件,但根据文件的内容和您的模式,您可能会得到误报和/或漏报。

答案2

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

for i in *.zip
do
   zipgrep ORA-1680 "$i"
done

答案3

AVFS文件系统提供了文件系统的视图,其中每个存档文件都/path/to/foo.zip可以作为目录进行访问~/.avfs/path/to/foo.zip#。它是保险丝文件系统,您可以在 Solaris 上安装该文件系统。 AVFS 提供对最常见存档文件格式的只读访问。

mountavfs
for z in ~/.avfs$PWD/*.zip; do
  find "$z#" -exec grep ORA-1680 {} +
done
fusermount -u ~/.avfs   # optional

答案4

尝试 ugrep

乌格勒普递归搜索 zip、gz、tar、tgz、bz2、lz4、zstd、pax、cpio 和其他类型的压缩文件和存档选项-z

相关内容