Reputation: 38705
When I do unzip -l zipfilename
, I see
1295627 08-22-11 07:10 A.pdf
473980 08-22-11 07:10 B.pdf
...
I only want to see the filenames. I try this
unzip -l zipFilename | cut -f4 -d" "
but I don't think the delimiter is just " "
.
Upvotes: 39
Views: 40131
Reputation: 247022
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)}
'
Upvotes: 28
Reputation: 13671
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.
Upvotes: 106
Reputation: 317
If you need to cater for filenames with spaces, try:
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) }'
Upvotes: 6