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

37

В моей командной строке 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"

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

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

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

рüффп
источник
Принятый ответ намного лучше, чем этот; но я хочу отметить, что все с множеством grepможет быть преобразовано в скрипт Awk, обычно с гораздо большей точностью. awk 'NR >3 { if (/^ *---/) exit 0; print }'будет обрезать первые три строки, а также нижний колонтитул, а также будет легко достать только имя файла (подсказка:) print substr($0, 29).
tripleee
Да, я полностью согласен, именно поэтому я задаю этот конкретный вопрос: чтобы найти лучшее и жизнеспособное решение.
рüффп

Ответы:

55
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
Стефан Шазелас
источник
спасибо мощный сед ... именно то, что я хотел; Также интересен инструмент zipinfo, я его не знал.
февраля
Есть ли способ игнорировать каталоги? unzip -Z1 zipfile.zipвыведет: directory / и directory / file.extension (Примечание: имена каталогов с. вполне вероятно, поэтому добавление a | grep .не работает)
Мэтт