zip爆弾のフルサイズを取得するには?

zip爆弾のフルサイズを取得するには?

今日はジッパー爆弾で遊んだ。 30TBのzip爆弾を生成するためにPythonプログラムを実行しましたが、一般的な警告が表示されました。

Warning: Using nested mode. The output may not be accurate.

この問題により、次のような考えが聞こえました。 zipファイル(要約の各ファイル)の合計サイズをどのように確認できますか?これを行う特定のツールはありますか?

編集する:提案された質問に対する回答は該当しません。返される値ははるかに小さく、約60kbです。再帰的ではないようで再帰的にする方法が見つかりません。

ベストアンサー1

通常、入れ子になったコンポーネントの一部またはほぼすべてを解放しない限り、これを行うことはできません。この作業を手動で実行したり、スクリプトを生成したい場合は、ディスクの制約内で安全に実行することをお勧めします。

たとえば、大容量ファイルを作成して圧縮します。もう一度小さなファイルで圧縮します。

yes 1 | head -c1G > file1
zip inner.zip file1
touch file2
zip outer.zip inner.zip file2

これで、何も解凍せずに外部zipコンテンツのサイズが小さいことがわかります。

$ unzip -v outer.zip 
Archive:  outer.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
 1042294  Stored  1042294   0% 2020-12-04 10:13 7093703f  inner.zip
       0  Stored        0   0% 2020-12-04 10:13 00000000  file2
--------          -------  ---                            -------
 1042294          1042294   0%                            2 files

解凍すると、入れ子になったzipファイルの内容サイズを表示できます。

$ unzip outer.zip 
$ unzip -v inner.zip 
Archive:  inner.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
1073741824  Defl:N  1042134 100% 2020-12-04 10:12 5aa3a8cc  file1
--------          -------  ---                            -------
1073741824          1042134 100%                            1 file

そして、このスタックには、さまざまなレベルのネストとさまざまな圧縮ファイルがあります。したがって、全体のサイズを計算するには、最後のステップまでこのステップを安全に繰り返すか処理できないサイズが見つかった場合は、プロセスを中断する必要があります。

おすすめ記事