unzip -l files.zip | grep filename
Dado um conjunto de arquivos zip, existe uma maneira fácil de listar apenas os arquivos zip que contêm arquivos cujos nomes correspondem a um determinado padrão, cf. usando grep -l
para listar apenas arquivos cujo conteúdo contenha linhas que correspondam a um determinado padrão?
O melhor que consegui criar é
for i in $ZIPFILE_LIST
> do j=$(basename $i)
> unzip -l $i > /tmp/$j
> grep -l $PATTERN /tmp/$j
> rm /tmp/$j
> done
mas é bastante hacky e sem, e. passando a grep
de saída através de sed
(com várias dores de cabeça de escape) ele vai lhe dizer quais arquivos você se importa, mas não lhe dará os caminhos completos em um formulário que você pode passar para outra coisa. Parece que este é um caso de uso razoavelmente comum e deve haver uma ferramenta melhor ou uma combinação de ferramentas para fazê-lo.
unzip -l files.zip | grep filename
Eu acho que você quer o zipgrep
, que está instalado no Ubuntu (então talvez instalado no seu sistema). É um script de shell que usa unzip e egrep internamente.
O o módulo zipfile do Python ajuda a resolver seu problema?
por exemplo:
import zipfile
def findfileinzip(source_filename, pattern):
print(pattern)
zf = zipfile.ZipFile(source_filename,'r')
for member in zf.namelist():
if member.find(pattern) != -1:
print(member)
Tags bash compression grep