我正在使用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
而不是zipinfo
as无法正常工作字符) 后接)。使用一种表示形式,反斜杠本身显示为。zipinfo
^HOME
^HOME
^H
OME
bsdtar
\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。