Extract list of file names in a zip archive when `

2019-02-02 20:34发布

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 " ".

标签: linux unix ksh
4条回答
兄弟一词,经得起流年.
2楼-- · 2019-02-02 21:09

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) }'
查看更多
女痞
3楼-- · 2019-02-02 21:15

Use awk:

unzip -l zipfilename | awk '{print $4}'
查看更多
The star\"
4楼-- · 2019-02-02 21:21

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.

查看更多
爷的心禁止访问
5楼-- · 2019-02-02 21:23

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)}
'
查看更多
登录 后发表回答