오늘은 지퍼폭탄을 가지고 놀았어요. 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
그리고 이 스택에는 여러 수준의 중첩과 다양한 압축 파일이 있을 수 있습니다. 따라서 전체 크기를 계산하려면 마지막 단계까지 이 단계를 안전하게 반복하거나 처리할 수 없는 크기가 발견되면 프로세스를 중단해야 합니다.