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 " "
.
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 " "
.
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)}
'
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.
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) }'
Use awk:
unzip -l zipfilename | awk '{print $4}'