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

Tha*_*ham 34 unix linux ksh

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

1295627  08-22-11 07:10   A.pdf
473980  08-22-11 07:10   B.pdf
...
Run Code Online (Sandbox Code Playgroud)

我只想看文件名.我试试这个

unzip -l zipFilename | cut -f4 -d" "
Run Code Online (Sandbox Code Playgroud)

但我不认为分隔符是公正的" ".

ami*_*tas 96

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

unzip -Z -1 archive.zip
Run Code Online (Sandbox Code Playgroud)

要么

zipinfo -1 archive.zip
Run Code Online (Sandbox Code Playgroud)

这将仅列出文件名,每行一个.

这两个命令完全相同.该-Z选项告诉unzip将其余选项视为zipinfo选项.有关unzipzipinfo的信息,请参见手册页.


gle*_*man 25

假设没有文件在名称中有空格:

unzip -l filename.zip | awk '{print $NF}'
Run Code Online (Sandbox Code Playgroud)

我的解压缩输出有页眉和页脚,因此awk脚本变为:

unzip -l filename.zip | awk '/-----/ {p = ++p % 2; next} p {print $NF}'
Run Code Online (Sandbox Code Playgroud)

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

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

  • 您可以使用-qq选项删除页眉和页脚:`unzip -l -qq filename.zip`.然后更简单的awk语句将起作用. (5认同)
  • Awk有一个每行`NF`变量,即字段数.`$ NF`是最后一个字段的值,这就是你获取文件名的方式.当第一行出现"-----"时,第二个脚本通过将变量`p`设置为true来工作,而`{printf $ NF}`块仅在`p`为真时执行. (4认同)
  • 如果你能解释一下你的`awk`脚本,那会有可能吗?完全明白,如果你没有时间. (2认同)

pet*_*tep 6

如果您需要使用空格来满足文件名,请尝试:

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) }'
Run Code Online (Sandbox Code Playgroud)