encontre um arquivo dentro de um arquivo tar.gz

12

É possível usar o findcomando para que ele pesquise os arquivos em um arquivo tar.gz também usando curingas?

gostar

find archive.tar.gz --name *foo*
braçadeira
fonte

Respostas:

17

Que tal apenas:

$ tar tf archive.tar.gz | grep foo
Chris Down
fonte
isso apenas lista todos os arquivos?
clamp
@clamp Sim, se você quiser fazer algo em cada arquivo, basta canalizar essa saída para outro comando.
obrigado! desculpe, mas eu sou um novato no unix. Eu tentei: tar tf graphics.tar.gz | find . --name *space*mas diz #unkown predicate --name
clamp
Os findargumentos do @clamp têm apenas um traço, mas como é uma lista de arquivos no stdin, você deseja usar grepcomo o código de exemplo do hesse. Tentetar tf graphics.tar.gz | grep 'space'
Kevin
1
grep *foo*não é uma expressão regular válida. gregnão entende globs, entende expressões regulares. Tente em grep foovez disso.
31512 Alexios
3

Monte o arquivo morto como um diretório. Você pode fazer isso com o sistema de arquivos AVFS , que permite acessar qualquer arquivo morto como um diretório cujo nome tem um final #.

mountavfs
cd ~/.avfs$PWD
find archive.tar.gz\# -name '*foo*'
Gilles 'SO- parar de ser mau'
fonte
não funcionar para gzip
van abel
@vanabel Um arquivo gzip não contém outros arquivos. É apenas um arquivo compactado. Portanto, não há um "interior" para pesquisar.
Gilles 'para de ser mau'
1

Eu acho que funciona sem pipe e grep.

como isso: tar tvf archive.tar.gz "foo"

dessa forma, os globs também funcionarão.

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

Saeed Sepehr
fonte