Searching for a string on multiple zip files
It is in general not possible to search for content within a compressed file without uncompressing it one way or another. Since zipgrep is only a shellscript, wrapping unzip and egrep itself, you might just as well do it manually:
for file in *.zip; do unzip -c "$file" | grep "ORA-1680"; done
If you need just the list of matching zip files, you can use something like:
for file in *.zip; do
if ( unzip -c "$file" | grep -q "ORA-1680"); then
echo "$file"
fi
done
This way you are only decompressing to stdout (ie. to memory) instead of decompressing the files to disk. You can of course try to just grep -a
the zip files but depending on the content of the file and your pattern, you might get false positives and/or false negatives.
zipgrep
takes a single file. To make it work across multiple files put it in a loop:
for i in *.zip
do
zipgrep ORA-1680 "$i"
done
The AVFS filesystem presents a view of the filesystem where every archive file /path/to/foo.zip
is accessible as a directory ~/.avfs/path/to/foo.zip#
. It's a FUSE filesystem, which you can install on Solaris. AVFS provides read-only access to most common archive file formats.
mountavfs
for z in ~/.avfs$PWD/*.zip; do
find "$z#" -exec grep ORA-1680 {} +
done
fusermount -u ~/.avfs # optional