Руководства по командной строке

Man » Онлайн-справочник по unzip - подробная онлайн-документация для страницы руководства unzip

🌍
unzip - просмотр, проверка и извлечение файлов из ZIP-архива

СИНТАКСИС

unzip   [-Z]   [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]]   file[.zip]  [file(s) ...]   [-x xfile(s) ...]
[-d exdir]

ОПИСАНИЕ

unzip позволяет просматривать, проверять или извлекать файлы из ZIP-архива, обычно встречающегося в системах MS-DOS. По умолчанию (без указания опций) все файлы из указанного ZIP-архива извлекаются в текущий каталог (и подкаталоги). Сопутствующая программа [zip]({filename}../../zip)(1) создает ZIP-архивы; обе программы совместимы с архивами, созданными PKWARE's PKZIP и PKUNZIP для MS-DOS, но во многих случаях опции или поведение программ по умолчанию различаются.

АРГУМЕНТЫ

file[.zip]

Путь к ZIP-архиву(ам). Если указано имя файла с подстановочными знаками, каждый соответствующий файл обрабатывается в порядке, определяемом операционной системой (или файловой системой). Только имя файла может быть с подстановочными знаками; путь сам по себе не может. Выражения с подстановочными знаками аналогичны тем, которые поддерживаются в обычно используемых Unix-оболочках (sh, ksh, csh) и могут содержать:

*      соответствует последовательности из 0 или более символов

?      соответствует ровно 1 символу

[...]  соответствует любому одному символу, найденному внутри скобок; диапазоны указываются начальным символом, дефисом и конечным символом. Если после левой скобки следует восклицательный знак или символ `^`, то диапазон символов внутри скобок дополняется (то есть, соответствием считается все, кроме символов внутри скобок). Чтобы указать буквальную левую скобку, необходимо использовать трехсимвольную последовательность ``[[]''.

(Обязательно заключайте в кавычки любой символ, который в противном случае может быть интерпретирован или изменен операционной системой, особенно в Unix и VMS.) Если не найдено ни одного соответствия, указанное значение предполагается буквальным именем файла; и если это тоже не удается, добавляется суффикс .zip. Обратите внимание, что самораспаковывающиеся ZIP-файлы поддерживаются, как и любые другие ZIP-архивы; просто укажите суффикс .exe (если он есть).

[file(s)]

Необязательный список элементов архива, которые должны быть обработаны, разделенных пробелами. (В версиях VMS, скомпилированных с определенным VMSCLI, файлы должны быть разделены запятыми. См. опцию -v в разделе OPTIONS ниже.) Регулярные выражения (подстановочные знаки) могут использоваться для сопоставления нескольких элементов; см. выше. Опять же, обязательно заключайте в кавычки выражения, которые в противном случае будут расширены или изменены операционной системой.

[-x xfile(s)]

Необязательный список элементов архива, которые должны быть исключены из обработки. Поскольку символы подстановки обычно соответствуют разделителям каталогов (/), эту опцию можно использовать для исключения любых файлов, находящихся в подкаталогах. Например, unzip foo *.[ch] -x */* извлечет все файлы C-исходного кода в основном каталоге, но не в каких-либо подкаталогах. Без опции -x все файлы C-исходного кода во всех каталогах в zip-файле будут извлечены.


[-d exdir]

Необязательный каталог, в который извлекаются файлы. По умолчанию все файлы и подкаталоги восстанавливаются в текущем каталоге; опция -d позволяет извлекать файлы в произвольный каталог (при условии, что у пользователя есть разрешение на запись в этот каталог). Эту опцию необязательно указывать в конце командной строки; она также принимается после указания zip-файла (вместе с обычными опциями), сразу после указания zip-файла или между файлами и опцией -x. Опцию и каталог можно объединить без пробелов, но имейте в виду, что это может подавлять обычное поведение оболочки. В частности, -d ~'' (тильда) в Unix C shells преобразуется в имя домашнего каталога пользователя, а-d~'' обрабатывается как буквальный подкаталог ``~'' текущего каталога.

ОПЦИИ

Обратите внимание, что для поддержки устаревшего оборудования экран справки unzip ограничен 22 или 23 строками и, следовательно, должен рассматриваться только как напоминание об основном синтаксисе unzip, а не как исчерпывающий список всех возможных флагов. Исчерпывающий список приведен ниже:

-Z     zipinfo(1) режим. Если первой опцией в командной строке является -Z, оставшиеся
опции воспринимаются как опции zipinfo(1). См. соответствующую страницу руководства для
описания этих опций.

-A     [OS/2, Unix DLL] вывести расширенную справку по программному интерфейсу (API) DLL.

-c     извлечь файлы в стандартный вывод/экран («CRT»). Эта опция аналогична опции -p,
за исключением того, что имя каждого файла выводится при его извлечении, разрешена опция
-a и автоматически выполняется преобразование ASCII-EBCDIC, если это уместно. Эта опция не
присутствует в экране справки unzip.

-f     обновить существующие файлы, т. е. извлечь только те файлы, которые уже существуют на
диске и которые новее дисковых копий. По умолчанию unzip запрашивает подтверждение перед
перезаписью, но опция -o может использоваться для подавления запросов. Обратите внимание, что
в многих операционных системах переменная среды TZ должна быть правильно установлена для
правильной работы опций -f и -u (в Unix эта переменная обычно устанавливается автоматически).
Причины этого довольно сложные, но связаны с различиями между временем файлов в формате DOS
(всегда местное время) и временем в формате Unix (всегда GMT/UTC) и необходимостью
сравнения этих двух значений. Типичное значение TZ — ``PST8PDT'' (тихоокеанское время США с
автоматической корректировкой на летнее время).

-l     вывести список архивных файлов (в кратком формате). Выводятся имена, размеры файлов в несжатом виде, даты и время изменения указанных файлов, а также итоговые данные по всем указанным файлам. Если UnZip был скомпилирован с определенной опцией OS2_EAS, опция -l также выводит столбцы с размерами сохраненных расширенных атрибутов OS/2 (EA) и списков управления доступом OS/2 (ACL).
Кроме того, отображается комментарий архива и комментарии отдельных файлов (если они есть). Если файл был архивирован из файловой системы, не учитывающей регистр (например, старая файловая система MS-DOS FAT), и была указана опция -L, имя файла преобразуется в нижний регистр и перед ним ставится символ «^».

-p     извлечь файлы в стандартный поток вывода (stdout). В стандартный поток вывода передаются только данные файлов, и файлы всегда извлекаются в двоичном формате, как они хранятся (без преобразований).

-t     проверить архивные файлы. Эта опция извлекает каждый указанный файл в память и сравнивает CRC (циклическую избыточную проверку, улучшенную контрольную сумму) распакованного файла с исходным значением CRC файла, хранящимся в архиве.

-T     [в большинстве ОС] установить временную метку архива(ов) равной временной метке самого нового файла в каждом из них. Это соответствует опции zip -go, за исключением того, что ее можно использовать с файлами архивов, соответствующими шаблону (например, «unzip -T \*.zip»), и она работает намного быстрее.

-u     обновить существующие файлы и создать новые при необходимости. Эта опция выполняет ту же функцию, что и опция -f, извлекая (с запросом) файлы, которые новее соответствующих файлов на диске, и, кроме того, извлекает те файлы, которых еще не существует на диске. См. выше информацию об установке правильного часового пояса для опции -f.

-v     вывести список архивных файлов (в подробном формате) или показать диагностическую информацию о версии. Эта опция эволюционировала и теперь ведет себя как опция и как модификатор. В качестве опции она имеет две цели: когда для zip-файла не указаны другие опции, -v выводит список файлов архива в подробном формате, добавляя к основной информации -l информацию о методе сжатия, размере сжатых данных, коэффициенте сжатия и 32-битной CRC. В отличие от большинства конкурирующих утилит, unzip удаляет 12 дополнительных байтов заголовка зашифрованных записей из чисел размера сжатых данных. Поэтому значения размера сжатых данных и коэффициента сжатия не зависят от статуса шифрования записи и показывают правильную производительность сжатия. (Полный размер зашифрованного потока сжатых данных для записей zip-файла сообщается в более подробных отчетах zipinfo(1), см. отдельное руководство). Когда zip-файл не указан (т. е. полная команда — просто «unzip -v»), на экран выводится диагностическое сообщение. В дополнение к обычному заголовку с датой выпуска и версией, unzip перечисляет домашний сайт Info-ZIP по FTP и где можно найти список других сайтов FTP и не FTP; целевую операционную систему, для которой он был скомпилирован, а также (возможно) аппаратное обеспечение, на котором он был скомпилирован, используемый компилятор и версию, и дату компиляции; любые специальные параметры компиляции, которые могут повлиять на работу программы (см. также раздел «ШИФРОВАНИЕ» ниже); и любые параметры, хранящиеся в переменных среды, которые могут выполнять ту же функцию (см. раздел «ПАРАМЕТРЫ ОКРУЖАЮЩЕЙ СРЕДЫ» ниже). В качестве модификатора он работает в сочетании с другими опциями (например, -t), чтобы создавать более подробный или отладочный вывод; это пока не реализовано полностью, но будет реализовано в будущих версиях.

-z     отображать только комментарий архива.

МОДИФИКАТОРЫ

-a     преобразовывать текстовые файлы. Обычно все файлы извлекаются точно в том виде, в котором они хранятся (как «двоичные» файлы). Опция -a указывает, что файлы, идентифицированные zip как текстовые (те, у которых в списках zipinfo есть метка «t», а не «b»), автоматически извлекаются как таковые, с преобразованием символов конца строки, символов конца файла и самой кодировки. (Например, в Unix-файлах для обозначения конца строки используются символы новой строки (LF) и отсутствует маркер конца файла (EOF); в Macintosh для обозначения конца строки используются символы возврата каретки (CR); а в большинстве операционных систем PC для обозначения конца строки используются символы CR+LF, а для обозначения конца файла — символ Control-Z. Кроме того, в IBM mainframe и в Michigan Terminal System используется кодировка EBCDIC, а не более распространенная кодировка ASCII, и NT поддерживает Unicode.) Следует отметить, что идентификация текстовых файлов zip отнюдь не совершенна; некоторые «текстовые» файлы могут быть двоичными и наоборот. Поэтому при использовании опции -a программа unzip печатает «[текст]» или «[двоичный]» в качестве визуальной проверки для каждого извлекаемого файла. Опция -aa принудительно извлекает все файлы как текст, независимо от предполагаемого типа файла. В VMS см. также -S.

-b     [общий] рассматривать все файлы как двоичные (без преобразования текста). Это сокращение для ---a.

-b     [Tandem] принудительно создавать файлы с типом файла 180 («C») при извлечении записей Zip, помеченных как «текст». (В Tandem опция -a включена по умолчанию, см. выше).

-b     [VMS] автоматически преобразовывать двоичные файлы (см. -a выше) в формат с фиксированной длиной записи, равной 512 байта. Если опция указана дважды (-bb), все файлы извлекаются в этом формате. При извлечении в стандартный вывод (активирована опция -c или -p), преобразование разделителей записей по умолчанию отключается для двоичных (-b) или всех (-bb) файлов.

-B     [при компиляции с определенной UNIXBACKUP] сохранять резервную копию каждого перезаписанного файла. Имя резервного файла — это имя целевого файла с добавлением символа «~» и, возможно, уникального порядкового номера (до 5 цифр). Порядковый номер применяется, если уже существует другой файл с исходным именем и символом «~». При использовании вместе с опцией «перезаписывать все» (-o) создание пронумерованных резервных файлов не выполняется. В этом случае все резервные файлы имеют имя исходного файла с добавленным символом «~», существующие резервные файлы удаляются без предупреждения. Эта функция работает аналогично поведению по умолчанию [emacs]({filename}../../emacs)(1) во многих местах.

Пример: старая копия файла «foo» переименовывается в «foo~».

Предупреждение: пользователи должны знать, что опция -B не предотвращает потерю существующих данных во всех случаях. Например, когда программа unzip запускается в режиме «перезаписывать все», существующий файл «foo~» удаляется, прежде чем программа unzip попытается переименовать файл «foo» в «foo~». Если эта попытка переименования не удастся (из-за блокировок файлов, недостаточных прав или ...), извлечение файла «foo~» отменяется, но старый резервный файл уже утерян. Аналогичный сценарий происходит, когда исчерпан диапазон порядковых номеров для пронумерованных резервных файлов (99999 или 65535 для 16-битных систем). В этом случае файл с максимальным порядковым номером удаляется и заменяется новой резервной версией без предупреждения.

-C использовать нечувствительное к регистру сопоставление при выборе элементов архива из списка шаблонов выбора, указанных в командной строке. Философия unzip заключается в том, что «вы получаете то, что просите». (Это также влияет на изменение опций -L/-U; см. соответствующие опции ниже). Поскольку некоторые файловые системы полностью чувствительны к регистру (в частности, системы, работающие под управлением Unix), и поскольку ZIP-архивы и unzip переносимы между платформами, по умолчанию unzip выполняет сопоставление подстановочных знаков и точных имен файлов с учетом регистра. То есть, указание «makefile» в командной строке будет соответствовать только «makefile» в архиве, а не «Makefile» или «MAKEFILE» (и то же самое относится и к спецификациям с подстановочными знаками). Поскольку это не соответствует поведению многих других операционных систем/файловых систем (например, OS/2 HPFS, которая сохраняет регистр символов, но не учитывает его), опцию -C можно использовать для принудительного выполнения нечувствительного к регистру сопоставления всех имен файлов. В приведенном выше примере все три файла будут соответствовать «makefile» (или «make*» и т. д.). Опция -C влияет на спецификации файлов как в обычном списке файлов, так и в списке исключенных файлов (xlist).

Обратите внимание, что опция -C не влияет на поиск zip-файлов и не влияет на сопоставление элементов архива с существующими файлами в пути извлечения. В файловой системе, чувствительной к регистру, unzip никогда не попытается перезаписать файл «FOO», извлекая элемент «foo»!

-D отключает восстановление меток времени для извлеченных элементов. Обычно unzip пытается восстановить всю метаинформацию для извлеченных элементов, которая содержится в ZIP-архиве (и не требует специальных разрешений или создает угрозу безопасности). Указав -D, вы говорите unzip не восстанавливать метки времени для каталогов, которые явно создаются из элементов ZIP-архива. Эта опция применима только к портам, поддерживающим установку меток времени для каталогов (в настоящее время ATheOS, BeOS, MacOS, OS/2, Unix, VMS, Win32; для других портов unzip опция -D не имеет эффекта). Дублированная опция -DD заставляет отключать восстановление меток времени для всех извлеченных элементов (файлов и каталогов). Эта опция приводит к установке меток времени для всех извлеченных элементов на текущее время.

В VMS настройка по умолчанию для этой опции — -D для обеспечения согласованности с поведением BACKUP: метки времени файлов восстанавливаются, метки времени извлеченных каталогов остаются установленными на текущее время. Чтобы включить восстановление меток времени каталогов, следует указать отрицанную опцию --D. В VMS опция -D отключает восстановление меток времени для всех извлеченных элементов ZIP-архива. (Здесь одна опция -D в командной строке объединяется с опцией -D по умолчанию, что дает тот же эффект, что и явная опция -DD в других системах).

-E     [Только для MacOS] отображать содержимое дополнительного поля MacOS во время операции восстановления.

-F     [Только для Acorn] подавлять удаление расширения типа файла NFS из сохраненных имен файлов.

-F     [Для систем, отличных от Acorn, поддерживающих длинные имена файлов с встроенными запятыми, и только если скомпилировано с определением ACORN_FTYPE_NFS] преобразовывать информацию о типе файла из дополнительных блоков поля RISC OS в расширение типа файла NFS и добавлять его к именам извлеченных файлов. (Если сохраненное имя файла, по-видимому, уже имеет добавленное расширение типа файла NFS, оно заменяется информацией из дополнительного поля.)

-i     [Только для MacOS] игнорировать имена файлов, хранящиеся в дополнительных полях MacOS. Вместо этого используется наиболее совместимое имя файла, хранящееся в общей части заголовка записи.

-j     удалить пути. Структура каталогов архива не воссоздается; все файлы помещаются в каталог извлечения (по умолчанию, текущий каталог).

-J     [Только для BeOS] удалить атрибуты файла. Атрибуты файла BeOS не восстанавливаются, только данные файла.

-J     [Только для MacOS] игнорировать дополнительные поля MacOS. Вся информация, специфичная для Macintosh, пропускается. Данные и ресурсы восстанавливаются как отдельные файлы.

-K     [Только для AtheOS, BeOS, Unix] сохранить атрибуты файлов SUID/SGID/Tacky. Без этого флага эти биты атрибутов очищаются в целях безопасности.

-L     преобразовать в нижний регистр любое имя файла, происходящее из операционной системы или файловой системы, работающей только с верхним регистром. (Это было поведение unzip по умолчанию в версиях до 5.11; новое поведение по умолчанию идентично старому поведению с опцией -U, которая устарела и будет удалена в будущей версии.) В зависимости от архиватора файлы, заархивированные в файловых системах с одним регистром (VMS, старая MS-DOS FAT и т. д.), могут храниться в виде имен файлов, состоящих только из букв верхнего регистра; это может быть некрасиво или неудобно при извлечении в файловую систему, сохраняющую регистр, такую как OS/2 HPFS или файловую систему, чувствительную к регистру, такую как Unix. По умолчанию unzip перечисляет и извлекает такие имена файлов точно так, как они хранятся (за исключением усечения, преобразования неподдерживаемых символов и т. д.); эта опция приводит к тому, что имена всех файлов из определенных систем преобразуются в нижний регистр. Опция -LL принудительно преобразует каждое имя файла в нижний регистр, независимо от исходной файловой системы.

-M     перенаправлять весь вывод через внутренний пейджер, аналогичный команде Unix more(1). В конце экранного блока вывода unzip приостанавливает работу с запросом «--More--»; следующий экранный блок можно просмотреть, нажав клавишу Enter (Return) или клавишу пробела. Unzip можно завершить, нажав клавишу «q» и, на некоторых системах, клавишу Enter/Return. В отличие от Unix more(1), здесь нет возможности поиска вперед или редактирования. Кроме того, unzip не замечает, если длинные строки переносятся на край экрана, что фактически приводит к выводу двух или более строк и, вероятно, к тому, что часть текста прокрутится вверх экрана, прежде чем ее можно будет увидеть. На некоторых системах количество доступных строк на экране не определяется, в этом случае unzip предполагает, что высота составляет 24 строки.

-n     не перезаписывать существующие файлы. Если файл уже существует, пропустить извлечение этого файла без запроса. По умолчанию unzip запрашивает подтверждение перед извлечением любого файла, который уже существует; пользователь может выбрать перезаписать только текущий файл, перезаписать все файлы, пропустить извлечение текущего файла, пропустить извлечение всех существующих файлов или переименовать текущий файл.

-N     [Amiga] извлекать комментарии файлов как заметки Amiga. Комментарии к файлам создаются с помощью опции -c команды [zip]({filename}../../zip)(1) или с помощью опции -N порта Amiga команды [zip]({filename}../../zip)(1), которая сохраняет заметки как комментарии.

-o     перезаписывать существующие файлы без запроса. Это опасная опция, поэтому используйте ее с осторожностью. (Обычно она используется с -f, и это единственный способ перезаписать атрибуты каталогов в OS/2.)

-P пароль
    использовать пароль для расшифровки зашифрованных записей zip-файла (если таковые имеются). ЭТО БЕЗОПАСНО! Многие многопользовательские операционные системы предоставляют способы, с помощью которых любой пользователь может видеть текущую командную строку любого другого пользователя; даже в автономных системах всегда существует угроза подглядывания. Хранение пароля в виде обычного текста в части командной строки в автоматизированном скрипте еще хуже. По возможности используйте не отображаемый интерактивный запрос для ввода паролей. (И там, где безопасность действительно важна, используйте надежное шифрование, такое как Pretty Good Privacy, вместо относительно слабого шифрования, предоставляемого стандартными утилитами zip-файлов).

-q     выполнять операции в тихом режиме (-qq = еще тише). Обычно unzip печатает имена извлекаемых или тестируемых файлов, методы извлечения, любые комментарии к файлам или zip-файлам, которые могут быть сохранены в архиве, и, возможно, сводку по окончании работы с каждым архивом. Опции -q[q] подавляют вывод некоторых или всех этих сообщений.

-s     [OS/2, NT, MS-DOS] преобразовывать пробелы в именах файлов в символы подчеркивания. Поскольку все PC-операционные системы допускают пробелы в именах файлов, unzip по умолчанию извлекает имена файлов с пробелами в неизменном виде (например, ``EA DATA. SF''). Однако это может быть неудобно, поскольку MS-DOS в частности не поддерживает пробелы в именах файлов. Преобразование пробелов в символы подчеркивания может устранить эту проблему в некоторых случаях.

-S     [VMS] преобразовывать текстовые файлы (-a, -aa) в формат записей Stream_LF вместо формата текстовых файлов по умолчанию, переменной длины. (Stream_LF — это формат записей по умолчанию для unzip в VMS. Он применяется, если не запрошено преобразование (-a, -aa и/или -b, -bb) или не обрабатывается запись, специфичная для VMS.)

-U     [только при поддержке UNICODE_SUPPORT] изменяет или отключает обработку UTF-8. При наличии UNICODE_SUPPORT опция -U заставляет unzip экранировать все не-ASCII символы из имен файлов в кодировке UTF-8 в виде ``#Uxxxx'' (для символов UCS-2) или ``#Lxxxxxx'' (для кодовых точек Unicode, требующих 3 октета). Эта опция предназначена главным образом для отладки, когда есть подозрение, что новая поддержка UTF-8 может привести к искажению извлеченных имен файлов.

Опция -UU позволяет полностью отключить распознавание имен файлов в кодировке UTF-8. Обработка кодировок имен файлов в unzip возвращается к поведению предыдущих версий.

[старое, устаревшее использование] сохраняет имена файлов в верхнем регистре, если они были созданы в MS-DOS, VMS и т. д. См. -L выше.

-V     сохраняет (VMS) номера версий файлов. Файлы VMS могут храниться с номером версии в формате file.ext;##. По умолчанию эти ``;##'' номера версий отбрасываются, но эта опция позволяет их сохранять. (На файловых системах, которые ограничивают длину имен файлов, номера версий могут быть усечены или отброшены, независимо от этой опции).

-W     [только когда включена опция компиляции WILD_STOP_AT_DIR] изменяет подпрограмму сопоставления с образцом, так что символы подстановки `?' (односимвольный) и `*' (многосимвольный) не соответствуют символу-разделителю каталогов `/'. (Двухсимвольная последовательность ``**'' действует как символ подстановки, который включает символ-разделитель каталогов в сопоставленные символы). Примеры:

"*.c" соответствует "foo.c", но не "mydir/foo.c"
"**.c" соответствует как "foo.c", так и "mydir/foo.c"
"*/*.c" соответствует "bar/foo.c", но не "baz/bar/foo.c"
"??*/*" соответствует "ab/foo" и "abc/foo"
но не "a/foo" или "a/b/foo"

Это измененное поведение эквивалентно стилю сопоставления с образцом, используемому в оболочках некоторых поддерживаемых UnZip операционных систем (например, Acorn RISC OS). Эта опция может быть недоступна в системах, где внутренний символ-разделитель каталогов `/` в Zip-архиве разрешен как обычный символ в именах файлов операционной системы. (В настоящее время UnZip использует одни и те же правила сопоставления с образцом как для спецификаций zip-файлов с подстановочными знаками, так и для шаблонов выбора записей zip. Для систем, разрешающих символ \`/' в качестве обычного символа имени файла, опция -W не будет работать должным образом для спецификации zip-файла с подстановочными знаками).

-X     [VMS, Unix, OS/2, NT, Tandem] восстанавливает информацию о владельце/правах доступа (UICs и записи ACL) в VMS или информацию о пользователе и группе (UID/GID) в Unix или списки управления доступом (ACL) в определенных версиях OS/2 с сетевой поддержкой (Warp Server с IBM LAN Server/Requester 3.0 до Warp Connect с IBM Peer 1.0) или списки управления доступом безопасности (ACL) в Windows NT. В большинстве случаев это потребует специальных системных привилегий, а двойное использование этой опции (-XX) в NT указывает unzip использовать привилегии для извлечения; но в Unix, например, пользователь, принадлежащий к нескольким группам, может восстановить файлы, принадлежащие любой из этих групп, при условии, что идентификаторы пользователей совпадают. Обратите внимание, что обычные атрибуты файлов всегда восстанавливаются; эта опция применяется только к дополнительной информации о владельце, доступной в некоторых операционных системах. [Списки управления доступом NT, по-видимому, не очень совместимы со списками управления доступом OS/2, поэтому попыток обеспечения кросс-платформенной совместимости привилегий не предпринимается. Неясно, при каких условиях это может быть полезно].

-Y     [VMS] рассматривает суффиксы имен заархивированных файлов в формате «.nnn» (где «nnn» — десятичное число) так, как если бы это были номера версий VMS («;nnn»). По умолчанию они рассматриваются как типы файлов. Пример:
«a.b.3» -> «a.b;3».

-$     [MS-DOS, OS/2, NT] восстанавливает метку тома, если извлекаемый носитель является съемным (например, дискета). Двойное указание опции (-$$) позволяет также присваивать метки жестким дискам. По умолчанию метки томов игнорируются.

-/ extensions
[Только Acorn] переопределяет список расширений, предоставляемый переменной среды Unzip$Ext. Во время извлечения имена файлов, соответствующие одному из элементов в этом списке расширений, помещаются в начало имени извлеченного файла.

-:     [все, кроме Acorn, VM/CMS, MVS, Tandem] позволяет извлекать элементы архива в места, находящиеся за пределами текущей «корневой папки извлечения». В целях безопасности, по умолчанию, команда unzip удаляет компоненты пути «родительского каталога» («../») из имен извлекаемых файлов. Эта функция безопасности (добавлена в версии 5.50) предотвращает случайную запись файлов в «чувствительные» области за пределами активного дерева папок извлечения. Опция -: позволяет вернуться к предыдущему, более свободному поведению, чтобы разрешить точное извлечение (более старых) архивов, в которых использовались компоненты «../» для создания нескольких деревьев каталогов на уровне текущей папки извлечения. Эта опция не позволяет явно записывать в корневой каталог («/»). Для этого необходимо установить целевую папку извлечения в корневую (например, -d /). Однако, когда указана опция -:, все еще можно косвенно записывать в корневой каталог, указав достаточное количество компонентов пути «../» в zip-архиве. Используйте эту опцию с особой осторожностью.

-^     [только Unix] позволяет управлять управляющими символами в именах извлеченных записей zip-архива. В Unix имя файла может содержать любой 8-битный код символа, за исключением «/» (разделитель каталогов) и NUL (0x00, индикатор завершения строки C), если только конкретная файловая система не имеет более строгих соглашений. Как правило, это позволяет встраивать ASCII-управляющие символы (или даже сложные управляющие последовательности) в имена файлов, по крайней мере, в «родных» Unix-файловых системах. Однако это может быть весьма подозрительно, если использовать эту функцию Unix. Встроенные управляющие символы в именах файлов могут иметь неприятные побочные эффекты при отображении на экране некоторым кодом листинга без достаточной фильтрации. Кроме того, обычным пользователям может быть сложно работать с такими именами файлов (например, при попытке указать их для операций открытия, копирования, перемещения или удаления). Поэтому, по умолчанию, команда unzip применяет фильтр, который удаляет потенциально опасные управляющие символы из имен извлекаемых файлов. Опция -^ позволяет отключить этот фильтр в редких случаях, когда необходимо намеренно восстановить встроенные управляющие символы имен файлов.

-2     [VMS]  принудительно выполняет преобразование имен файлов в имена, совместимые с ODS2. По умолчанию используется следующий подход: для целевой файловой системы ODS5 используются ее возможности, сохраняя регистр и расширенные символы имен файлов; для целевой файловой системы ODS2 применяется фильтрация имен файлов для обеспечения совместимости с ODS2.

ПАРАМЕТРЫ ОКРУЖАЮЩЕЙ СРЕДЫ

Поведение программы `unzip` может быть изменено с помощью параметров, заданных в переменной окружения. Это можно сделать для любого параметра, но, вероятно, это наиболее полезно с параметрами `-a`, `-L`, `-C`, `-q`, `-o` или `-n`: чтобы `unzip` автоматически преобразовывала текстовые файлы по умолчанию, преобразовывала имена файлов из систем с верхним регистром в нижний, выполняла сопоставление имен без учета регистра, работала тише или всегда перезаписывала или никогда не перезаписывала файлы при их извлечении. Например, чтобы `unzip` работала как можно тише, сообщая только об ошибках, можно использовать одну из следующих команд:

Unix Bourne shell: UNZIP=-qq; export UNZIP

Unix C shell: setenv UNZIP -qq

OS/2 или MS-DOS:
set UNZIP=-qq

VMS (кавычки для нижнего регистра):
define UNZIP_OPTS "-qq"

Параметры, заданные в окружении, рассматриваются так же, как и любые другие параметры командной строки, за исключением того, что они фактически являются первыми параметрами в командной строке. Чтобы отменить параметр, заданный в окружении, можно использовать «оператор минус», чтобы удалить его. Например, чтобы отменить один из флагов тихой работы в приведенном выше примере, используйте команду

unzip --q[другие параметры] zipfile

Первый дефис — это обычный символ переключателя, а второй — знак минус, который отменяет действие параметра q. Таким образом, эффект здесь заключается в том, что отменяется одна единица тишины. Чтобы отменить оба флага тихой работы, можно использовать два (или больше) минуса:

unzip -t--q zipfile
unzip ---qt zipfile

(эти две команды эквивалентны). Это может показаться странным или запутанным, но это вполне интуитивно понятно: просто игнорируйте первый дефис и продолжайте. Это также согласуется с поведением Unix [nice]({filename}../../nice)(1).

Как показывают приведенные выше примеры, имена переменных по умолчанию — UNZIP\_OPTS для VMS (где символ, используемый для установки unzip в качестве внешней команды, в противном случае был бы несовместим с переменной окружения) и UNZIP для всех остальных операционных систем. Для совместимости с zip(1) также принимается UNZIPOPT (не спрашивайте). Однако, если определены и UNZIP, и UNZIPOPT, то UNZIP имеет приоритет. Параметр диагностики unzip (-v без имени файла zip) можно использовать для проверки значений всех четырех возможных переменных окружения unzip и zipinfo.


Переменная окружения TZ должна быть установлена в соответствии с локальным часовым поясом, чтобы опции -f и -u работали правильно. См. описание опции -f выше для получения подробной информации. Эта переменная также может потребоваться для правильной установки временных меток извлеченных файлов. В версии unzip для WIN32 (Win9x/ME/NT4/2K/XP/2K3) конфигурация часового пояса берется из реестра, при условии, что он правильно настроен в Панели управления. Для этой версии переменная TZ игнорируется.

ДЕШИФРОВАНИЕ

Зашифрованные архивы полностью поддерживаются программным обеспечением Info-ZIP, но из-за ограничений на экспорт, установленных в США, поддержка де-/шифрования может быть отключена в вашей скомпилированной версии. Однако, начиная с весны 2000 года, ограничения на экспорт в США были сняты, и наши исходные архивы теперь содержат полный код шифрования. Если вам нужны бинарные дистрибутивы с включенной поддержкой шифрования, смотрите файл WHERE в любом исходном или бинарном дистрибутиве Info-ZIP, где указаны местоположения как внутри, так и за пределами США.

Некоторые скомпилированные версии unzip могут не поддерживать дешифрование. Чтобы проверить версию на наличие поддержки шифрования, либо попробуйте протестировать или извлечь зашифрованный архив, либо проверьте диагностический экран unzip (см. опцию -v выше) на наличие [decryption] в списке специальных опций компиляции.

Как указано выше, опцию -P можно использовать для указания пароля в командной строке, но это снижает безопасность. Предпочтительным методом дешифрования является простое извлечение; если элемент zip-файла зашифрован, unzip запросит пароль, не отображая вводимый текст. unzip продолжает использовать один и тот же пароль, пока он, по-видимому, является правильным, проверяя 12-байтовый заголовок каждого файла. Правильный пароль всегда будет соответствовать заголовку, но существует вероятность 1 из 256, что и неправильный пароль также подойдет. (Это функция безопасности формата zip-файлов PKWARE; она помогает предотвратить грубые атаки, которые в противном случае могли бы получить большое преимущество в скорости, проверяя только заголовок.) В случае, если указан неправильный пароль, но он проходит проверку заголовка, либо будет сгенерирован неправильный CRC для извлеченных данных, либо unzip не сможет извлечь данные, потому что расшифрованные байты не образуют допустимый поток сжатых данных.

Если первый пароль не проходит проверку заголовка для какого-либо файла, unzip запросит другой пароль и так далее, пока все файлы не будут извлечены. Если пароль неизвестен, ввод пустого пароля (т.е. просто нажатие клавиши «Возврат» или «Enter») интерпретируется как сигнал для прекращения дальнейших запросов. После этого будут извлечены только незашифрованные файлы в архиве(ах). (На самом деле, это не совсем так: более старые версии zip(1) и zipcloak(1) разрешали использование пустых паролей, поэтому unzip проверяет каждый зашифрованный файл, чтобы увидеть, работает ли пустой пароль. Это может привести к «ложным срабатываниям» и ошибкам при извлечении, как указано выше.)


Архивы, зашифрованные 8-битными паролями (например, пароли с использованием европейских символов с ударениями), могут быть несовместимы между разными системами и/или другими архиваторами. Эта проблема возникает из-за использования различных методов кодирования для таких символов, включая Latin-1 (ISO 8859-1) и OEM-кодировку 850. DOS PKZIP 2.04g использует OEM-кодировку; Windows PKZIP 2.50 использует Latin-1 (и, следовательно, несовместим с DOS PKZIP); Info-ZIP использует OEM-кодировку в версиях для DOS, OS/2 и Win3.x, но ISO-кодировку (Latin-1 и т. д.) во всех остальных; а Nico Mak’s WinZip 6.x вообще не допускает 8-битные пароли. UnZip 5.3 (или новее) пытается сначала использовать набор символов по умолчанию (например, Latin-1), а затем альтернативный набор (например, OEM-кодировку) для проверки паролей. В системах EBCDIC, если обе эти попытки не удались, в качестве последнего средства будет протестирована кодировка EBCDIC. (EBCDIC не тестируется в не-EBCDIC системах, поскольку не существует известных архиваторов, использующих кодировку EBCDIC для шифрования.) Другие ISO-кодировки, кроме Latin-1, не поддерживаются. Новая (частичная) поддержка Unicode (соответственно, UTF-8) в UnZip 6.0 еще не была адаптирована для обработки паролей при распаковке. В системах, использующих UTF-8 в качестве основной кодировки символов, Unzip просто пытается выполнить расшифровку с использованием пароля, закодированного в UTF-8; встроенные попытки проверить пароль в переведенной кодировке еще не были адаптированы для поддержки UTF-8 и, следовательно, не будут успешными.

ПРИМЕРЫ

Чтобы использовать unzip для извлечения всех элементов архива letters.zip в текущий каталог и подкаталоги, создавая необходимые подкаталоги:

unzip letters

Чтобы извлечь все элементы letters.zip только в текущий каталог:

unzip -j letters

Чтобы проверить letters.zip, выводя только сводное сообщение, указывающее, в порядке ли архив:

unzip -tq letters

Чтобы проверить все zip-файлы в текущем каталоге, выводя только сводные сообщения:

unzip -tq \*.zip

(Обратная косая черта перед звездочкой требуется только в том случае, если оболочка расширяет подстановочные знаки, как в Unix; можно использовать двойные кавычки, как в примерах исходного кода.) Для извлечения в стандартный вывод всех элементов letters.zip, имена которых заканчиваются на .tex, с автоматической конвертацией в локальное соглашение об окончании строки и передачей вывода в more(1):

unzip -ca letters \*.tex | more

Чтобы извлечь двоичный файл paper1.dvi в стандартный вывод и передать его в программу печати:

unzip -p articles paper1.dvi | dvips

Чтобы извлечь все файлы исходного кода FORTRAN и C — *.f, *.c, *.h и Makefile — в каталог /tmp:

unzip source.zip "*.[fch]" Makefile -d /tmp

(двойные кавычки необходимы только в Unix и только если включено использование подстановочных знаков). Чтобы извлечь все файлы исходного кода FORTRAN и C, независимо от регистра (например, как *.c и *.C, и любой файл makefile, Makefile, MAKEFILE или аналогичный):

unzip -C source.zip "*.[fch]" makefile -d /tmp

Чтобы извлечь любые такие файлы, но преобразовать все имена в верхнем регистре MS-DOS или VMS в нижний регистр и преобразовать символы конца строки всех файлов в локальный стандарт (независимо от того, какие файлы могут быть помечены как «двоичные»):

unzip -aaCL source.zip "*.[fch]" makefile -d /tmp

Чтобы извлечь только более новые версии файлов, уже находящихся в текущем каталоге, без запроса (ВНИМАНИЕ: будьте осторожны при распаковке в одном часовом поясе zip-архива, созданного в другом — ZIP-архивы, отличные от созданных Zip 2.1 или более поздней версии, не содержат информации о часовом поясе, и «более новый» файл из восточного часового пояса на самом деле может быть старше):

unzip -fo sources

Чтобы извлечь более новые версии файлов, уже находящихся в текущем каталоге, и создать все файлы, которых там нет (та же оговорка, что и в предыдущем примере):

unzip -uo sources

Чтобы отобразить диагностический экран, показывающий, какие параметры unzip и zipinfo хранятся в переменных среды, была ли включена поддержка расшифровки, компилятор, с помощью которого был скомпилирован unzip, и т. д.:

unzip -v

В последних пяти примерах предполагается, что UNZIP или UNZIP_OPTS установлены в -q. Чтобы выполнить однократную тихую операцию:

unzip -l file.zip

Чтобы выполнить двойную тихую операцию:

unzip -ql file.zip

(Обратите внимание, что «.zip» обычно не требуется). Чтобы выполнить стандартную операцию:

unzip --ql file.zip
или
unzip -l-q file.zip
или
unzip -l--q file.zip
(Дополнительные минусы в параметрах не повредят).

СОВЕТЫ

Текущий разработчик, будучи ленивым, считает очень полезным определить пару псевдонимов: tt для «unzip -tq» и ii для «unzip -Z» (или «zipinfo»). Затем можно просто ввести «tt zipfile», чтобы проверить архив, что стоит сделать по привычке. Если повезет, unzip сообщит: «В сжатых данных zipfile.zip ошибок не обнаружено», после чего можно вздохнуть с облегчением.

Разработчику также полезно установить переменную среды UNZIP в «-aL» и
он склоняется к тому, чтобы добавить «-C». Его переменная ZIPINFO установлена в «-z».

ДИАГНОСТИКА

Код выхода (или уровень ошибки) приблизительно соответствует кодам выхода, определенным PKWARE, и принимает следующие значения, за исключением VMS:

0     нормально; ошибки или предупреждения не обнаружены.

1     была обнаружена одна или несколько ошибок предупреждений, но обработка все равно была успешно завершена.
Это включает в себя zip-файлы, в которых один или несколько файлов были пропущены из-за неподдерживаемого метода сжатия или шифрования с неизвестным паролем.

2     обнаружена общая ошибка в формате ZIP-файла. Обработка, возможно, завершилась успешно; некоторые поврежденные ZIP-файлы, созданные другими архиваторами, имеют простые обходные пути.

3     обнаружена серьезная ошибка в формате ZIP-файла. Обработка, вероятно, немедленно прервалась.

4     unzip не смогла выделить память для одного или нескольких буферов во время инициализации программы.

5     unzip не смогла выделить память или получить доступ к терминалу для чтения паролей для расшифровки.

6     unzip не смогла выделить память во время распаковки на диск.

7     unzip не смогла выделить память во время распаковки в памяти.

8     [в настоящее время не используется]

9     указанные ZIP-файлы не найдены.

10    указаны неверные параметры в командной строке.

11    не найдено ни одного соответствующего файла.

50    диск (или был) заполнен во время извлечения.

51    конец ZIP-архива был достигнут преждевременно.

80    пользователь преждевременно прервал работу unzip с помощью Control-C (или аналогично).

81    тестирование или извлечение одного или нескольких файлов не удалось из-за неподдерживаемых методов сжатия или неподдерживаемой расшифровки.

82    файлы не найдены из-за неправильных паролей для расшифровки. (Если хотя бы один файл успешно обрабатывается, статус выхода будет равен 1.)

VMS интерпретирует стандартные значения возврата Unix (или PC) как более страшные вещи, поэтому unzip вместо этого отображает их в статусные коды в стиле VMS. Текущее отображение выглядит следующим образом: 1 (успех) для нормального выхода, 0x7fff0001 для предупреждающих ошибок и (0x7fff000? + 16*нормальный_статус_выхода_unzip) для всех остальных ошибок, где `?` равно 2 (ошибка) для значений unzip 2, 9-11 и 80-82 и 4 (фатальная ошибка) для остальных (3-8, 50, 51). Кроме того, существует параметр компиляции для расширения этого поведения: определение RETURN_CODES приводит к появлению удобочитаемого объяснения того, что означает статус ошибки.

ОШИБКИ

Многокомпонентные архивы пока не поддерживаются, за исключением случаев использования zip. (Все части должны быть соединены вместе в правильном порядке, а затем zip -F'' (для zip 2.x) илиzip -FF'' (для zip 3.x) должны быть применены к объединенному архиву, чтобы исправить'' его. Кроме того, zip 3.0 и более поздние версии могут объединять многокомпонентные (разделенные) архивы в один объединенный файл с помощьюzip -s- inarchive -O outarchive''. См. руководство zip 3 для получения дополнительной информации.) Это определенно будет исправлено в следующем основном выпуске.

Архивы, читаемые из стандартного ввода, пока не поддерживаются, за исключением funzip (и только первый элемент архива может быть извлечен).

Архивы, зашифрованные 8-битными паролями (например, пароли с символами европейских языков), могут быть несовместимы с разными системами и/или другими архиваторами. См. обсуждение в разделе РАСШИФРОВКА выше.

Опция -M (``more'') в unzip пытается учитывать автоматическую обертку длинных строк. Однако код может не распознавать правильные места для обертки. Во-первых, символы табуляции (и аналогичные управляющие последовательности) не учитываются и обрабатываются как обычные печатные символы. Во-вторых, в зависимости от конкретной системы/ОС, unzip может не определять фактическую геометрию экрана, а полагается на «обычно используемые» значения по умолчанию. Правильная обработка табуляции потребует реализации запроса на получение фактической настройки табуляции на выходной консоли.


Даты, время и разрешения хранимых каталогов не восстанавливаются, за исключением Unix. (В Windows NT и последующих версиях метки времени теперь восстанавливаются.)

[MS-DOS] При извлечении или тестировании файлов из архива на неисправном дискете, если выбрана опция «Fail» в сообщении DOS «Abort, Retry, Fail?», старые версии unzip могут привести к зависанию системы, требующему перезагрузки. Эта проблема, по-видимому, была исправлена, но сочетание клавиш Ctrl+C (или Ctrl+Break) по-прежнему можно использовать для завершения работы unzip.

В DEC Ultrix unzip иногда завершался неудачно при работе с длинными zip-файлами (неверная CRC, не всегда воспроизводимая). По-видимому, это было связано либо с аппаратной ошибкой (кэш-память), либо с ошибкой операционной системы (неправильная обработка ошибок страниц?). Поскольку Ultrix была заменена Digital Unix (OSF/1), это, возможно, больше не является проблемой.

[Unix] Специальные файлы Unix, такие как FIFO-буферы (именованные каналы), блочные устройства и символьные устройства, не восстанавливаются, даже если они каким-либо образом представлены в zip-файле, и файлы с жесткой связью не восстанавливаются как связанные. По сути, единственными типами файлов, которые восстанавливает unzip, являются обычные файлы, каталоги и символические (мягкие) ссылки.

[OS/2] Расширенные атрибуты существующих каталогов обновляются только в том случае, если указана опция -o («перезаписать все»). Это ограничение операционной системы; поскольку у каталогов есть только время создания, unzip не может определить, более новые или более старые атрибуты хранятся. На практике это может означать, что требуется двухэтапный подход: сначала распаковать архив нормально (с или без обновления существующих файлов), а затем перезаписать только записи каталогов (например, «unzip -o foo */»).

[VMS] При извлечении в другой каталог для опции -d принимается только синтаксис [.foo]; простой синтаксис Unix foo игнорируется (как и менее распространенный синтаксис VMS foo.dir).

[VMS] Когда извлекаемый файл уже существует, запрос unzip позволяет только пропустить, перезаписать или переименовать; дополнительно должна быть предусмотрена возможность создания новой версии файла. Фактически, выбор «перезаписать» создает новую версию; старая версия не перезаписывается и не удаляется.

ССЫЛКИ

funzip(1), zip(1), zipcloak(1), zipgrep(1), zipinfo(1), zipnote(1), zipsplit(1)

URL

Главная страница Info-ZIP в настоящее время находится по адресу http://www.info-zip.org/pub/infozip/ или ftp://ftp.info-zip.org/pub/infozip/.


АВТОРЫ

Основными авторами Info-ZIP (ныне полуактивными участниками рабочей группы Zip-Bugs) являются: Эд Гордон (Zip, основное сопровождение, общий код, Zip64, Win32, Unix, Unicode); Кристиан Шпилер (координация сопровождения UnZip, VMS, MS-DOS, Win32, общий код, общая интеграция и оптимизация Zip и UnZip); Онно ван дер Линден (Zip); Майк Уайт (Win32, графический интерфейс Windows, DLL для Windows); Кай Уве Роммель (OS/2, Win32); Стивен М. Шведа (VMS, Unix, поддержка новых функций); Пол Киениц (Amiga, Win32, Unicode); Крис Герборс (BeOS, QNX, Atari); Джонатан Хадсон (SMS/QDOS); Серджио Монези (Acorn RISC OS); Харальд Денкер (Atari, MVS); Джон Буш (Solaris, Amiga); Хантер Готли (VMS, сопровождение сайта Info-ZIP); Стив Солисбери (Win32); Стив Миллер (графический интерфейс Windows CE); Джонни Ли (MS-DOS, Win32, Zip64) и Дэйв Смит (Tandem NSK).

Следующие люди были бывшими членами группы разработчиков Info-ZIP и внесли значительный вклад в ключевые части текущего кода: Грег «Cave Newt» Ролофс (UnZip, распаковка unshrink); Жан-Лу Гайли (сжатие deflate); Марк Адлер (распаковка inflate, fUnZip).

Автор исходного кода unzip, на котором основана Info-ZIP, — Сэмюэл Х. Смит; Карл Маскотт сделал первый порт для Unix; а Дэвид П. Киршбаум организовал и возглавлял Info-ZIP на ранних этапах, а Кейт Петерсен размещал исходный список рассылки на WSMR-SimTel20. Полный список участников UnZip значительно вырос; обратитесь к файлу CONTRIBS в исходном дистрибутиве UnZip для получения относительно полной версии.

ВЕРСИИ

v1.2 15 марта 89 г. Сэмюэл Х. Смит v2.0 9 сентября 89 г. Сэмюэл Х. Смит v2.x осень 1989 г. многие участники Usenet v3.0 1 мая 90 г. Info-ZIP (DPK, консолидатор) v3.1 15 августа 90 г. Info-ZIP (DPK, консолидатор) v4.0 1 декабря 90 г. Info-ZIP (GRR, сопровождающий) v4.1 12 мая 91 г. Info-ZIP v4.2 20 марта 92 г. Info-ZIP (подгруппа Zip-Bugs, GRR) v5.0 21 августа 92 г. Info-ZIP (подгруппа Zip-Bugs, GRR) v5.01 15 января 93 г. Info-ZIP (подгруппа Zip-Bugs, GRR) v5.1 7 февраля 94 г. Info-ZIP (подгруппа Zip-Bugs, GRR) v5.11 2 августа 94 г. Info-ZIP (подгруппа Zip-Bugs, GRR) v5.12 28 августа 94 г. Info-ZIP (подгруппа Zip-Bugs, GRR) v5.2 30 апреля 96 г. Info-ZIP (подгруппа Zip-Bugs, GRR) v5.3 22 апреля 97 г. Info-ZIP (подгруппа Zip-Bugs, GRR) v5.31 31 мая 97 г. Info-ZIP (подгруппа Zip-Bugs, GRR) v5.32 3 ноября 97 г. Info-ZIP (подгруппа Zip-Bugs, GRR) v5.4 28 ноября 98 г. Info-ZIP (подгруппа Zip-Bugs, SPC) v5.41 16 апреля 00 г. Info-ZIP (подгруппа Zip-Bugs, SPC) v5.42 14 января 01 г. Info-ZIP (подгруппа Zip-Bugs, SPC) v5.5 17 февраля 02 г. Info-ZIP (подгруппа Zip-Bugs, SPC) v5.51 22 мая 04 г. Info-ZIP (подгруппа Zip-Bugs, SPC) v5.52 28 февраля 05 г. Info-ZIP (подгруппа Zip-Bugs, SPC) v6.0 20 апреля 09 г. Info-ZIP (подгруппа Zip-Bugs, SPC)