Извлечь список имен файлов в zip-архиве, когда `unzip -l` - PullRequest
34 голосов
/ 22 августа 2011

Когда я делаю unzip -l zipfilename, я вижу

1295627  08-22-11 07:10   A.pdf
473980  08-22-11 07:10   B.pdf
...

Я хочу видеть только имена файлов.Я пробую это

unzip -l zipFilename | cut -f4 -d" "

, но я не думаю, что разделитель - это просто " ".

Ответы [ 4 ]

97 голосов
/ 29 ноября 2012

Самый простой способ сделать это - использовать следующую команду:

unzip -Z -1 archive.zip

или

zipinfo -1 archive.zip

В этом списке будут перечислены только имена файлов, по одному в каждой строке.

Две команды в точности эквивалентны.Параметр -Z указывает unzip рассматривать остальные параметры как параметры zipinfo.См. Справочные страницы для unzip и zipinfo .

25 голосов
/ 22 августа 2011

Предполагается, что ни один из файлов не имеет пробелов в именах:

unzip -l filename.zip | awk '{print $NF}'

Мой вывод распаковки имеет как верхний, так и нижний колонтитул, поэтому сценарий awk становится:

unzip -l filename.zip | awk '/-----/ {p = ++p % 2; next} p {print $NF}'

Версия, которая обрабатывает имена файлов с пробелами:

unzip -l filename.zip | awk '
    /----/ {p = ++p % 2; next}
    $NF == "Name" {pos = index($0,"Name")}
    p {print substr($0,pos)}
'
6 голосов
/ 14 ноября 2012

Если вам нужно обработать имена файлов с пробелами, попробуйте:

unzip -l zipfilename.zip | awk -v f=4  ' /-----/ {p = ++p % 2; next} p { for (i=f; i<=NF;i++) printf("%s%s", $i,(i==NF) ? "\n" : OFS) }'
3 голосов
/ 22 августа 2011

Используйте awk:

unzip -l zipfilename | awk '{print $4}'
...