
(非常に長い)zipファイルのリストが与えられたら、解凍されたサイズをどのように知ることができますか?
答え1
unzip -Zt zipname
これを使用して、アーカイブコンテンツの要約とフルサイズを直接印刷できます。以下は出力の例です。
unzip -Zt a.zip
1 file, 14956 bytes uncompressed, 3524 bytes compressed: 76.4%
その後、awkを使用してバイト数を抽出できます。
unzip -Zt a.zip | awk '{print $3}'
14956
最後に、Tomの答えに示すようにforループに入れます。
total=0
for file in *.zip; do # or whichever files you want
(( total += $(unzip -Zt $file |awk '{ print $3 }') ))
done
echo $total
答え2
これを入力すると、unzip -l <zipfile>
圧縮されていないサイズとすべてのファイルの圧縮されていない合計サイズを含むzip内のファイルのリストが印刷されます。
これは人間が読める出力ですがunzip -l <zipfile> | tail -n1 | awk '{ print $1 }'
。
フルサイズを取得するには:
total=0
for file in *.zip; do # or whichever files you want
(( total += $(unzip -l $file | tail -n1 | awk '{ print $1 }') ))
done
echo $total
答え3
unzip -l
各ファイルのサイズをリストし、最後の行とその合計を印刷します。したがって、zipファイルを繰り返し見ることができ、出力を追加します。unzip -l "$zip" | awk 'END {print $1}'
またはunzip -Zt "$zip" | awk 'END {print $3}'
。シェルループの場合、unzip -Zt
少し速くすることができます。
total=0
for z in *.zip; do
set $(unzip -Zt -- "$z")
total=$((total + $3))
done
これはファイルの合計サイズのみを示します。各ファイルには小さなオーバーヘッドがあります。名前を格納するスペース、一部のメタデータを保存するスペース、およびほとんどのファイルシステムがファイルをブロック単位で割り当てるため、使用されていないスペースもあります。一般的なファイルシステムでは、オーバーヘッドは数キロバイトに達する可能性があります。オーバーヘッドは、ファイルサイズ、ディレクトリ構造(ディレクトリオーバーヘッドのため)、および複数の小さなファイルを同じブロックにマージするファイルシステムの機能によって異なり、完全に予測することはできません。
ほとんどのファイルが数キロバイトを超える場合は、それを心配しないでください。ただし、ファイルが非常に小さい場合は、オーバーヘッドを考慮する必要があるかもしれません。繰り返しますが、オーバーヘッドはファイルシステムによって異なります。 ext4では、各ファイルはブロック全体(ほとんどのシステムではデフォルトで4kB)を埋めます。次のスクリプトは、各ファイルを4kBに丸め、ファイル名の長さに数バイトを加算して合計サイズを推定します。
for z in *.zip; do
unzip -l -- "$z"
done | awk '
$2 ~ /^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$/ {total += ($1+4095)/4096*4096 + length($0)}
END {print total}
'
答え4
見て、お母さん、ループがありません!
ループを使用していませんが、まだ同じ答えを得るため、少し速くすることができる別の解決策があります。
unzip -l \*.zip|awk 'BEGIN{total=0}/ [0-9]+ files/{total=total+$1;}END{print "total bytes: "total}'
「BEGIN{total=0}」部分は必ずしも必要ではありません。