打印 zip 名称和文件名

打印 zip 名称和文件名

我正在使用zipinfo -1 a.zip命令来显示 zip 的内容。如何每次并排显示 zip 名称和大小文件名。

例如有两个 zip:

a.zip contains file1, file2, file3, file4
b.zip contains file5, file6, file7, file8

所需输出:

a.zip file1
a.zip file2
a.zip file3
a.zip file4
b.zip file5
b.zip file6
b.zip file7
b.zip file8

答案1

你可以做类似的事情:

for file in *.zip; do
  bsdtar -tf "$file" | F=$file awk '{print ENVIRON["F"], $0}'
done

如果 zip 文件名包含通配符并且其控制字符的编码不明确(例如,如果您看到一行,您不知道它是字面意思还是(退格键的表示),则此处使用bsdtar而不是zipinfoas无法正常工作字符) 后接)。使用一种表示形式,反斜杠本身显示为。zipinfo^HOME^HOME^HOMEbsdtar\b\\

使用 GNU grep,您可以filename:使用 using作为前缀grep -H --label="$file" '^'来代替。也可以看看perl -nse 'print "$file $_"' -- -file="$file"。做不是使用sed "s/^/$file /",因为这是一个命令注入漏洞。

答案2

对于单个 zip 文件,例如:

unzip -l a.zip | awk 'NR==1{a=$2}; (NR>3 && NF==4){print a, $NF}'

应该足够了。为了方便处理多个文件,您可以将命令放入函数中,用变量替换 a.zip。

相关内容