Extract list of file names in a zip archive when `unzip -l`
The easiest way to do this is to use the following command:
unzip -Z -1 archive.zip
or
zipinfo -1 archive.zip
This will list only the file names, one on each line.
The two commands are exactly equivalent. The -Z
option tells unzip to treat the rest of the options as zipinfo options. See the man pages for unzip and zipinfo.
Assuming none of the files have spaces in names:
unzip -l filename.zip | awk '{print $NF}'
My unzip output has both a header and footer, so the awk script becomes:
unzip -l filename.zip | awk '/-----/ {p = ++p % 2; next} p {print $NF}'
A version that handles filenames with spaces:
unzip -l filename.zip | awk ' /----/ {p = ++p % 2; next} $NF == "Name" {pos = index($0,"Name")} p {print substr($0,pos)}'