(本当に長い)zipファイルのリストが与えられた場合、圧縮解除後のサイズをどのように確認できますか?
(本当に長い)zipファイルのリストが与えられた場合、圧縮解除後のサイズをどのように確認できますか?
回答:
あなたはそれを使用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
最後に、トムの答えのようにforループに入れます。
total=0
for file in *.zip; do # or whichever files you want
(( total += $(unzip -Zt $file |awk '{ print $3 }') ))
done
echo $total
を入力する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
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)。次のスクリプトは、各ファイルを4 KBに切り上げ、ファイル名に数バイトを加えた長さを加算することにより、合計サイズを概算します。
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}
'
df -i
、それは必要に応じて動的iノードを多くのスペースとして割り当てることができますXFSに比べて)を、。)