Extract list of file names in a zip archive when `unzip -l`

后端 未结 4 1509
醉梦人生
醉梦人生 2020-12-28 12:33

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 th

相关标签:
4条回答
  • 2020-12-28 13:21

    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)}
    '
    
    0 讨论(0)
  • 2020-12-28 13: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.

    0 讨论(0)
  • 2020-12-28 13:23

    Use awk:

    unzip -l zipfilename | awk '{print $4}'
    
    0 讨论(0)
  • 2020-12-28 13:38

    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) }'
    
    0 讨论(0)
提交回复
热议问题