it-swarm.cn

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

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

我尝试了此操作(它在Zip文件中搜索包含字符串“ ORA-”的任何文本文件),但是没有用。

zipgrep ORA-1680 *.Zip

在不解压Zip文件的情况下进行此操作的正确方法是什么?

25
ziggy

通常,如果不以一种或另一种方式解压缩文件,就不可能在压缩文件中搜索内容。由于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文件,但根据文件的内容和您的模式,您可能会得到误报和/或误报。

27
Noah

zipgrep接受一个文件。为了使它跨多个文件工作,请将其循环:

for i in *.Zip
do
   zipgrep ORA-1680 "$i"
done
18
dogbane

[〜#〜] avfs [〜#〜] 文件系统显示了文件系统的视图,每个存档文件/path/to/foo.Zip都可以作为目录~/.avfs/path/to/foo.Zip#访问。这是一个 Fuse 文件系统,您可以在Solaris上安装它。 AVFS提供对大多数常用归档文件格式的只读访问。

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