I can search through a number of files for a particular string by pipelining 'grep' and 'find' commands.

Now, I have some 10 zip files each of which has archived a lot of text files. Is there any way I could search for a string in all text files archived in all those zip files without extracting the zip files?

unzip -c \*.zip | grep yourtext

You could use some regexes in the grep command to finetune the string matching

Based on the comments below, zgrep would be a better option.

  • Thanks Raj. But your solution is useful when just one zip file is used at a time. Nothing appears if *.zip is used but just a CAUTION: filename not matched appears.
    – Usman
    Nov 24 '10 at 6:57
  • you have to use the backslash according to the manual page. Am just printing this out for your benefit - it should be unzip -c <backslash>*.zip, not just *.zip. Nov 24 '10 at 7:11
  • Ahaan..okay got it worked but there is still one problem. I am doing all this to find which file contains a particular string. The command you mentioned will not print the name of file in which the string is found.
    – Usman
    Nov 24 '10 at 8:09
  • ah..then you could use zgrep - zgrep <options> <pattern> *.zip Nov 25 '10 at 0:24

You can also use zipgrep command that is included with unzip package. For example:

for z in *.zip ; do zipgrep PATTERN $z |sed "s/^/$z: /" ; done

This command gives you matched file names inside the archives as well.


Mount the archives as directories using AVFS or fuse-zip. Both are FUSE filesystems.

AVFS provides a view of the filesystem in ~/.avfs where every archive file has an associated directory with the same name plus a # at the end.

grep -r PATTERN ~/.avfs/$PWD/*.zip\#/

Fuse-zip mounts a zip onto a directory.

for z in *.zip; do mkdir "$z.d" && fuse-zip "$z" "$z.d"; done
grep -r PATTERN *.zip.z/
fusermount -u *.zip.d
rmdir *.zip.d

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.