12

Is it possible to use the find command so that it searches the files within a tar.gz archive also using wildcards?

like

find archive.tar.gz --name *foo*
15

How about just:

$ tar tf archive.tar.gz | grep foo
  • doesnt that just list all the files? – clamp Mar 12 '12 at 13:06
  • @clamp Yes, if you want to do something to each file, simply pipe that output to another command. – user13742 Mar 12 '12 at 13:07
  • thanks! sorry but im a newbie in unix. i tried: tar tf graphics.tar.gz | find . --name *space* but it says unkown predicate --name – clamp Mar 12 '12 at 13:17
  • @clamp find arguments only take one dash, but because it's a list of files on stdin, you want to use grep instead, like hesse's example code. Try tar tf graphics.tar.gz | grep 'space' – Kevin Mar 12 '12 at 13:24
  • 1
    grep *foo* isn't a valid regular expression. greg doesn't understand globs, it understands regular expressions. Try grep foo instead. – Alexios Mar 12 '12 at 14:19
3

Mount the archive as a directory. You can do it with the AVFS filesystem, which allows you to access any archive as a directory whose name has a trailing #.

mountavfs
cd ~/.avfs$PWD
find archive.tar.gz\# -name '*foo*'
  • not work for gzip – van abel Oct 24 '18 at 10:19
  • @vanabel A gzip file doesn't contain other files. It's just one file, compressed. So there's no “inside” to search in. – Gilles Oct 24 '18 at 18:10
1

I think it works with no pipe and grep.

like this: tar tvf archive.tar.gz "foo"

as this way, globs will also work.

tar tvf archive.tar.gz "*.foo"

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.