Как составить список файлов в zip-архиве без дополнительной информации в командной строке

Как составить список файлов в zip-архиве без дополнительной информации в командной строке

В моей командной строке bash при использовании unzip -l test.zipя получаю такой вывод:

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

Но меня интересуют только строки, содержащие данные файла.

Я попробовал сделать фильтрацию с помощью grep следующим образом:

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

Но это долго и подвержено ошибкам (например, имя файла Архив в этом списке будет удалено)

Есть ли другие опции для unzip -l (я проверил страницу руководства unzip и не нашел ни одной) или другой инструмент для этого?

Для меня важно не распаковывать архив, а просто посмотреть, какие файлы внутри.

решение1

zipinfo -1 file.zip

Или:

unzip -Z1 file.zip

Перечислил бы только файлы.

Если вам по-прежнему нужна дополнительная информация для каждого имени файла, вы можете сделать следующее:

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

Или:

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

Или (предполагая GNU head):

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

Или вы можете использовать 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

Связанный контент