Почему некоторые (но не все) zip-файлы размером более ~3,7 ГБ не удается извлечь

Я имею дело с большим количеством zip-файлов (DCP Films для кинофестиваля) размером от 4 ГБ до 40 ГБ, которые отправляются мне разными людьми, которые используют различные программы для сжатия папки, которую они отправляют. Обычно в папке 5-10 файлов, размер файлов 1-5 превышает 3,7 ГБ.

Некоторые из этих архивов могут быть извлечены без каких-либо проблем, но для некоторых я получаю следующие ошибки:

  • пытается извлечь с 7z:

    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 
    

  • пытаясь спасти (на MacOS):

    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
    

  • после спасения (MacOS):

    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?

    Дополнительная информация:

  • Все это 64-битные среды. В системе Linux я использую ext4, а в MacOS я пока не знаю (нет доступа в течение ближайших 2 недель), но думаю, что это файловая система MacOS, если она есть.
  • Мой коллега смог извлечь несколько архивов, которые не работали на моей машине в MacOS, простым "щелчком правой кнопкой мыши" -> "извлечь здесь" - но они понятия не имеют, какую программу они используют - просто они на компьютере Apple.

  • 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 . -коррумпированный

    Другие вопросы по тегам