`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 存档中的文件名列表的主要内容,如果未能解决你的问题,请参考以下文章