Como você procura por strings em um arquivo que, por sua vez, está em um arquivo?

5

Eu posso pesquisar através de um número de arquivos para uma determinada string pipelining comandos 'grep' e 'find'.

Agora, eu tenho 10 arquivos zip cada um dos quais arquivou muitos arquivos de texto. Existe alguma maneira que eu poderia procurar por uma string em todos os arquivos de texto arquivados em todos os arquivos zip sem extrair os arquivos zip?

    
por Undefined 24.11.2010 / 06:29

3 respostas

1
unzip -c \*.zip | grep yourtext

Você pode usar alguns regexes no comando grep para ajustar a string correspondente

Com base nos comentários abaixo, zgrep seria a melhor opção.

    
por 24.11.2010 / 07:39
2

Você também pode usar o comando zipgrep que está incluído no pacote unzip. Por exemplo:

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

Este comando também fornece nomes de arquivos correspondentes dentro dos arquivos.

    
por 25.11.2010 / 16:34
1

Monte os arquivos como diretórios usando AVFS ou zip de fusível . Ambos são sistemas de arquivos FUSE .

O AVFS fornece uma visualização do sistema de arquivos em ~/.avfs , em que cada arquivo archive possui um diretório associado com o mesmo nome, além de um # no final.

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

O zip do fusível monta um zip em um diretório.

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
    
por 25.11.2010 / 02:28

Tags