今日はジッパー爆弾で遊んだ。 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
そして、このスタックには、さまざまなレベルのネストとさまざまな圧縮ファイルがあります。したがって、全体のサイズを計算するには、最後のステップまでこのステップを安全に繰り返すか処理できないサイズが見つかった場合は、プロセスを中断する必要があります。