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*

Respostas:


17

Que tal apenas:

$ tar tf archive.tar.gz | grep foo

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*'

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"

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.