У меня есть два файла: один я создал с помощью zip 2.3.1, а другой - с помощью zip 3.0. Оба являются zip одного и того же каталога. Вот два файла и их размеры:
1.7G from-2.3.1.zip
1.7G from-3.0.zip
Мой план состоит в том, чтобы перевести мою систему на новый zip-архив, чтобы я мог потенциально создавать zip-файлы большего размера, например, до 3 ГБ или около того.
Однако меня беспокоит то, что когда я распаковываю эти файлы с помощью немного более старой версии unzip, я получаю ошибки при попытке распаковать zip, созданный с помощью zip 3.0.
$ unzip -t from-2.3.1.zip > /dev/null # NO Errors
$ unzip -t from-3.0.zip > /dev/null
warning [from-3.0.zip]: 76 extra bytes at beginning or within zipfile
(attempting to process anyway)
error [from-3.0.zip]: reported length of central directory is
-76 bytes too long (Atari STZip zipfile? J.H.Holm ZIPSPLIT 1.1
zipfile?). Compensating...
error: expected central file header signature not found (file #67358).
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
$
Причина, по которой я обеспокоен, заключается в том, что, если я перейду на zip 3.0, я заставлю всех моих последующих пользователей перейти на более новую версию unzip, поскольку unzip 6.0, например, распаковывает оба этих файла без ошибок.
Эта аномалия возникает не во всех случаях, поэтому я не уверен в ее полном объеме.
Какие-либо предложения? Я как-то неправильно построил zip 3.0?
Спасибо.
Разница в том Zip64 формат файла, который был введен для того, чтобы иметь возможность сжимать файлы большего размера. Старые утилиты (например, проводник Windows XP) этого не понимают.
Что касается Linux, Debian Stable включен unzip 6.0
поскольку по крайней мере его выпуск 2011 года (в журнале изменений говорится zip 3.0a
был выпущен в 2004 году и unzip 6.00
был выпущен в 2009 году), поэтому я лично считаю, что если вы «заставляете» своих пользователей обновляться, вы оказываете им услугу.