Подтвердить что ты не робот

Извлечь список имен файлов в zip-архиве, когда `unzip -l`

Когда я делаю 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" "

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

4b9b3361

Ответ 1

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

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

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

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)}
'

Ответ 2

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

unzip -Z -1 archive.zip

или

zipinfo -1 archive.zip

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

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

Ответ 3

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

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) }'

Ответ 4

Использовать awk:

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