zipinfo -1 a.zip
zipの内容を表示するコマンドを使用しています。毎回zip名とサイズファイル名を並べて表示する方法。
たとえば、次の2つの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ファイル名にワイルドカードが含まれていて、その制御文字のエンコーディングがあいまいな場合(たとえば、行が表示され、それがリテラルか(バックスペースキーの表現)かわからない場合)、ここでas文字のbsdtar
代わりに使用できます。zipinfo
正常に動作しません))次)。式を使用すると、バックスラッシュ自体がとして表示されます。zipinfo
^HOME
^HOME
^H
OME
bsdtar
\b
\\
GNUでは、代わりにプレフィックスとしてusingを使用grep
できます。また、見ることができます。するfilename:
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を変数に置き換えることができます。