Como listar arquivos em um zip sem informações extras na linha de comando

Como listar arquivos em um zip sem informações extras na linha de comando

Na minha linha de comando bash, quando uso, unzip -l test.zipobtenho a saída assim:

Archive:  test.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
   810000  05-07-2014 15:09   file1.txt
   810000  05-07-2014 15:09   file2.txt
   810000  05-07-2014 15:09   file3.txt
---------                     -------
  2430000                     3 files

Mas estou interessado apenas nas linhas que contêm os detalhes do arquivo.

Tentei fazer uma filtragem usando grep assim:

unzip -l test.zip | grep -v Length | grep -v "\-\-\-\-" | g -v Archive | grep -v " files"

Mas é longo e sujeito a erros (por exemplo, um nome de arquivo Arquivo nesta lista será eliminado)

Existe alguma outra opção com unzip -l (verifiquei a página de manual de descompactação e não encontrei nenhuma) ou outra ferramenta para fazer isso?

É importante para mim não descompactar o arquivo, mas apenas ver quais arquivos estão dentro.

Responder1

zipinfo -1 file.zip

Ou:

unzip -Z1 file.zip

Listaria apenas os arquivos.

Se você ainda quiser informações extras para cada nome de arquivo, você pode fazer:

unzip -Zl file.zip | sed '1,2d;$d'

Ou:

unzip -l file.zip | sed '1,3d;$d' | sed '$d'

Ou (assumindo GNU head):

unzip -l file.zip | tail -n +4 | head -n -2

Ou você pode usar libarchive's bsdtar:

$ bsdtar tf test.zip
file1.txt
file2.txt
file3.txt
$ bsdtar tvf test.zip
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file1.txt
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file2.txt
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file3.txt
$ bsdtar tvvf test.zip
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file1.txt
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file2.txt
-rw-rw-r--  0 1000   1000   810000 Jul  5  2014 file3.txt
Archive Format: ZIP 2.0 (deflation),  Compression: none

informação relacionada