【问题标题】:Extract list of file names in a zip archive when `unzip -l``unzip -l` 时提取 zip 存档中的文件名列表
【发布时间】:2011-11-01 04:38:08
【问题描述】:

当我做unzip -l zipfilename 时,我明白了

1295627  08-22-11 07:10   A.pdf
473980  08-22-11 07:10   B.pdf
...

我只想查看文件名。我试试这个

unzip -l zipFilename | cut -f4 -d" "

但我不认为分隔符只是" "

【问题讨论】:

标签: linux unix ksh


【解决方案1】:

最简单的方法是使用以下命令:

unzip -Z -1 archive.zip

zipinfo -1 archive.zip

这将只列出文件名,每行一个。

这两个命令是完全等价的。 -Z 选项告诉 unzip 将其余选项视为 zipinfo 选项。请参阅 unzipzipinfo 的手册页。

【讨论】:

    【解决方案2】:

    假设所有文件的名称中都没有空格:

    unzip -l filename.zip | awk '{print $NF}'
    

    我的解压输出既有页眉也有页脚,所以 awk 脚本变为:

    unzip -l filename.zip | awk '/-----/ {p = ++p % 2; next} p {print $NF}'
    

    处理带空格的文件名的版本:

    unzip -l filename.zip | awk '
        /----/ {p = ++p % 2; next}
        $NF == "Name" {pos = index($0,"Name")}
        p {print substr($0,pos)}
    '
    

    【讨论】:

    • 如果您能稍微解释一下您的awk 脚本,是否有可能。如果你没有时间,完全理解。
    • Awk 有一个每行 NF 变量,它是字段数。 $NF 是最后一个字段的值,这就是您获取文件名的方式。第二个脚本通过将变量 p 设置为 true 来工作,当第一行带有“-----”时,{printf $NF} 块仅在 p 为 true 时执行。
    • 您可以使用 -qq 选项去除页眉和页脚:unzip -l -qq filename.zip。然后更简单的 awk 语句将起作用。
    【解决方案3】:

    如果您需要满足带有空格的文件名,请尝试:

    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) }'
    

    【讨论】:

      【解决方案4】:

      使用 awk:

      unzip -l zipfilename | awk '{print $4}'
      

      【讨论】:

      • 不过,请注意包含空格的恶意文件名。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 2015-04-02
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      相关资源
      最近更新 更多