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

그리고 이 스택에는 여러 수준의 중첩과 다양한 압축 파일이 있을 수 있습니다. 따라서 전체 크기를 계산하려면 마지막 단계까지 이 단계를 안전하게 반복하거나 처리할 수 없는 크기가 발견되면 프로세스를 중단해야 합니다.

관련 정보