Извлечь список имен файлов в 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" "
но я не думаю, что разделитель просто " "
.
Ответы
Ответ 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}'