Equivalente de grep -l para nomes de arquivos em zipfile

2

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.

    
por David Moles 30.05.2014 / 23:11

3 respostas

2

unzip -l files.zip | grep filename
    
por 31.05.2014 / 02:16
0

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.

    
por 31.05.2014 / 00:29
0

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)
    
por 31.05.2014 / 02:03