`unzip -l` 时提取 zip 存档中的文件名列表

Posted

技术标签:

【中文标题】`unzip -l` 时提取 zip 存档中的文件名列表【英文标题】:Extract list of file names in a zip archive when `unzip -l` 【发布时间】: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" "

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

【问题讨论】:

如果空格数是固定的,你必须相应地推进字段,比如-f7左右。如果文件名的位置是固定的,请改用-b 相关Super User:View files in ZIP archive on Linux 【参考方案1】:

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

unzip -Z -1 archive.zip

zipinfo -1 archive.zip

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

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

【讨论】:

【参考方案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'

【讨论】:

不过,请注意包含空格的恶意文件名。

以上是关于`unzip -l` 时提取 zip 存档中的文件名列表的主要内容,如果未能解决你的问题,请参考以下文章

如何用unzip一次解压多个.zip文件 三种方法

如何知道 npm `unzip` 模块何时完成解压缩文件?

解压zip的linux命令

访问 .zip 存档中的文件而不提取它们

如何在不解压缩的情况下列出 zip 存档中的文件?

自动 7zip 任务 - “无法打开文件作为存档”