Почему некоторые (но не все) zip-файлы размером более ~3,7 ГБ не удается извлечь
Я имею дело с большим количеством zip-файлов (DCP Films для кинофестиваля) размером от 4 ГБ до 40 ГБ, которые отправляются мне разными людьми, которые используют различные программы для сжатия папки, которую они отправляют. Обычно в папке 5-10 файлов, размер файлов 1-5 превышает 3,7 ГБ.
Некоторые из этих архивов могут быть извлечены без каких-либо проблем, но для некоторых я получаю следующие ошибки:
7z e ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz (506E3),ASM,AES-NI)
Scanning the drive for archives:
1 file, 8033862438 bytes (7662 MiB)
Extracting archive: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip
ERROR: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip
Can not open the file as archive
Can't open as archive: 1
Files: 0
Size: 0
Compressed: 0
unzip ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip
Archive: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip
warning [ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip]: 4294967296 extra bytes at beginning or within zipfile
(attempting to process anyway)
file #1: bad zipfile offset (local header sig): 4294967296
(attempting to re-compensate)
creating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/
inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ASSETMAP.xml
inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_cpl.xml
inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_pkl.xml
inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_Reel_1_j2c.mxf
error: invalid compressed data to inflate
file #6: bad zipfile offset (local header sig): 3671207290
(attempting to re-compensate)
inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_Reel_1_pcm.mxf
inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/VOLINDEX.xml
zip -FF ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip --out ore.zip
Fix archive (-FF) - salvage what can
Found end record (EOCDR) - says expect single disk archive
Scanning for entries...
copying: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ (0 bytes)
copying: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ASSETMAP.xml (588 bytes)
copying: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_cpl.xml (631 bytes)
copying: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_pkl.xml (613 bytes)
copying: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_Reel_1_j2c.mxf
zip warning: no end of stream entry found: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_Reel_1_j2c.mxf
zip warning: rewinding and scanning for later entries
unzip ore.zip
Archive: ore.zip
warning [ore.zip]: 4294967296 extra bytes at beginning or within zipfile
(attempting to process anyway)
file #1: bad zipfile offset (local header sig): 4294967296
(attempting to re-compensate)
creating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/
inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ASSETMAP.xml
inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_cpl.xml
inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_pkl.xml
file #5: bad zipfile offset (local header sig): 2432
(attempting to re-compensate)
file #5: bad zipfile offset (local header sig): 2432
inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_Reel_1_pcm.mxf
inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/VOLINDEX.xml
До сих пор мне удалось только извлечь архив с помощью 7z на Windows10.
Я понимаю...
Headers-Error
Warning: 32-Bit overflow in headers
... но все же, использование 7z на Windows10 - единственный способ извлечь архив - несмотря на ошибку / предупреждение заголовка
Я использую компьютер с Linux, но я также пытался использовать "разархивировать" на MacOS, и я хочу иметь возможность извлекать архив там, а не переходить на компьютер с Windows каждый раз, когда это происходит.
- Почему тот же файл работает на 7z Windows10, но не на 7z на MacOS или 7z на Linux?
- Как я могу извлечь архив на компьютере с Linux?
Дополнительная информация:
1 ответ
Если размер ZIP-файла > 4 ГБ и создан OneDrive или Windows, стоит попробовать еще одну утилиту, предназначенную для исправления заголовков:
https://github.com/pmqs/Fix-OneDrive-Zip .
По-видимому, существуют некоторые разногласия по поводу того, как обрабатывать заголовок «количество файлов» для файлов Zip64. Продукты Microsoft ожидают, что заголовок количества файлов должен быть равен 0, в то время как другие системы ожидают, что он будет равен 1. Более новые версии 7-zip для Windows (версии 19+) прекрасно справляются с этой проблемой, но в Linux есть только более старый порт POSIX, p7zip, т.е. версия 16 от 2016 года, и у нее нет способа решить эту проблему. Утилита, указанная выше, представляет собой сценарий на основе Perl, который изменяет информацию заголовка так, что количество файлов меняется с 0 на 1, чтобы утилиты могли обрабатывать файлы.
Если вам интересно, кто-то подробно изучил эту проблему здесь:
https://www.bitsgalore.org/2020/03/11/does-microsoft-onedrive-export-large-ZIP-files-that-are . -коррумпированный