Estou trabalhando no SunOS 5.10. Eu tenho uma pasta que contém cerca de 200 arquivos zip. Cada arquivo zip contém apenas um arquivo de texto. Eu gostaria de procurar uma string específica em todos os arquivos de texto em todos os arquivos zip.
Eu tentei isso (que procura por qualquer arquivo de texto no arquivo zip que contém a string "ORA-"), mas não funcionou.
zipgrep ORA-1680 *.zip
Qual é a maneira correta de fazê-lo sem descompactar os arquivos zip?
Respostas:
Geralmente, não é possível procurar conteúdo dentro de um arquivo compactado sem descompactá-lo de uma maneira ou de outra. Como o zipgrep é apenas um shellscript, envolvendo o descompactação e o egrep, você pode fazê-lo manualmente:
Se você precisar apenas da lista de arquivos zip correspondentes, poderá usar algo como:
Dessa forma, você está apenas descompactando para stdout (ou seja, para memória) em vez de descompactar os arquivos em disco. Obviamente, você pode tentar apenas
grep -a
os arquivos zip, mas, dependendo do conteúdo do arquivo e do seu padrão, poderá obter falsos positivos e / ou falsos negativos.fonte
unzip -c
descompacta o arquivo em stdout. Ele não grava todo o arquivo descompactado em nenhum outro lugar.unzip
usos-p
para transmitir para o pipe!zipgrep
leva um único arquivo. Para fazê-lo funcionar em vários arquivos, coloque-o em um loop:fonte
for i in *.zip; do zipgrep TextToSearch $i && echo $i; done
O sistema de arquivos AVFS apresenta uma visão do sistema de arquivos em que cada arquivo
/path/to/foo.zip
está acessível como um diretório~/.avfs/path/to/foo.zip#
. É um sistema de arquivos FUSE , que você pode instalar no Solaris. O AVFS fornece acesso somente leitura aos formatos de arquivo mais comuns.fonte