Como posso listar todos os arquivos * .doc em um arquivo zip, incluindo arquivos em subdiretórios?

7

Eu tenho arquivos Zip, que podem ter esta aparência:

$ zipinfo -1 zip.zip
doc.doc
dotx.dotx
xls.xls
ppt.ppt
txt.txt
c.c
subdir/subdir2/doc.doc
subdir/xls.xls
subdir/ppt.ppt
subdir/c.c
subdir/txt.txt
subdir/subdir2/
subdir/

Eu quero imprimir todos os arquivos * .doc, mas zipinfo -1 zip.zip *.doc apenas imprime os arquivos .doc no diretório raiz do arquivo Zip. Como posso imprimir todos os arquivos .doc em todos os subdiretórios?

    
por MMM 12.09.2012 / 18:16

3 respostas

3
zipinfo -1 zip.zip '*.doc'

funciona para mim, exibindo todos os arquivos em subdiretórios. Eu acho que você está esquecendo as aspas em torno do *.doc . Sem as aspas, o *.doc expande para todos os arquivos .doc no diretório atual e, em seguida, é passado para zipinfo como o padrão de pesquisa. Portanto, se você tiver uma versão descompactada do arquivo presente no diretório local, o comando mostrará apenas os arquivos .doc de nível superior.

Com aspas, o argumento é protegido do shell, portanto, o curinga torna zipinfo com êxito.

    
por 12.09.2012 / 19:09
2

você pode experimentar este:

zipinfo -1 zip.zip | grep '\(/\|^\)*.\.doc$'
    
por 12.09.2012 / 18:25
0

Se você montar o arquivo como um diretório, poderá usar os comandos habituais sem precisar se preocupar com o fato de os arquivos estarem dentro de um arquivo.

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# . O AVFS fornece acesso somente leitura aos formatos de arquivo mais comuns. Execute o comando

mountavfs

uma vez após cada reinicialização (se você quiser desmontar ~/.avfs , execute fusermount -u ~/.avfs ).

Depois disso, os comandos habituais funcionarão:

cd ~/.avfs$PWD
find zip.zip\# -name '*.doc'

ou

ls ~/.avfs$PWD/zip.zip\#/**/*.doc
    
por 13.09.2012 / 02:53