Более подробную справку см. в Руководстве по Zip

 

Zip хранит файлы в zip-архивах. Действие по умолчанию заключается в добавлении или замене записей zip-файла.

Базовая командная строка:

zip опции archive_name file file ...

Несколько примеров:

Добавить file.txt в z.zip (при необходимости создать z): zip z file.txt
Заархивировать все файлы в текущем каталоге в z.zip: zip z *
Заархивировать все файлы в текущем каталоге и
вложенных каталогах также в z.zip: zip -r z .

Основные режимы:

Внешние режимы (выбор файлов из файловой системы):
добавить - добавление новых файлов/обновление существующих файлов в архиве (по умолчанию)
-u обновление - добавление новых файлов/обновление существующих файлов только в случае более поздней даты
-f освежить - обновлять только существующие файлы (файлы не добавляются)
-FS синхронизация файлов - обновление, если дата или размер изменены, удаление, если ОС не соответствует
Внутренние режимы (выбор записей в архиве):
-d удалить - удаление файлов из архива (см. ниже)
-U копировать - выбрать файлы в архиве для копирования (используйте с --out)

Основные опции:

-r рекурсия в каталоги (см. Рекурсию ниже)
-m после создания архива удалить исходные файлы (переместите в архив)
-j имена ненужных каталогов (сохранять только имена файлов)
-q бесшумная работа
-v подробная операция (просто "zip -v" показывает информацию о версии)
-c запрос однострочного комментария для каждой записи
-z запрос комментария для архива (заканчивающийся просто строкой "." или EOF)
-@ считывание имен в zip из stdin (один путь на строку)
-o сделает zip-файл таким же старым, как последняя запись

 

Синтаксис:

Полный синтаксис командной строки выглядит следующим образом:

zip [-короткие варианты ...] [--длинные варианты ...] [zipfile [path path ...]] [-xi list]

Допускается любое количество коротких и длинных аргументов параметров (в пределах допустимых значений), а также любое количество аргументов пути для архивирования файлов. Если zip-файл существует, архив считывается. Если zip-файл имеет значение "-", передает поток в stdout. Если какой-либо путь равен "-", zip stdin.

Опции и значения:

Для коротких опций, которые принимают значения, используйте -oзначение или -o значение или -o=значение
Для длинных опций параметра используйте либо --longoption=значение, либо --longoption значение

Например:

zip -ds 10 --temp-dir=path zipfile path1 path2 --exclude pattern pattern
Избегайте -oзначение (без пробелов между ними), чтобы избежать путаницы
В частности, имейте в виду 2-символьные опции. Например:
-d -s является (удалить, разделить размер), в то время как -ds является (размер точки)
Обычно лучше разбивать короткие параметры на несколько аргументов по функциям
zip -r -dbdcds 10m -lilalf logfile archive input_directory -ll

Все аргументы после просто "--" arg читаются дословно как пути, а не варианты.
zip zipfile path path ... -- verbatimpath verbatimpath ...
Используйте -nw, чтобы также отключить подстановочные знаки, чтобы пути считывались буквально:
zip zipfile -nw -- "-leadingdashpath" "a[path].c" "path*withwildcard"
Возможно, вам все равно придется экранировать или приводить аргументы в кавычках, чтобы избежать расширения оболочки

Подстановочные знаки:

Внутренне zip поддерживает следующие подстановочные знаки:
? (или %% или #, в зависимости от операционной системы) соответствует любому отдельному символу
* соответствует любому количеству символов, включая ноль
[list] соответствует символу в списке (регулярное выражение), может выполнять диапазон [ac-f], все, кроме [!bf]
Если порт поддерживает [], необходимо экранировать [ как [[] или использовать -nw, чтобы отключить подстановочные знаки
Для оболочек, которые расширяют подстановочные знаки, экранируйте (\* или "*"), чтобы zip мог выполнять рекурсию
zip zipfile -r . -i "*.h"

Обычно * пересекает границы каталога в пути, например, 'a*b' может совпадать с 'ac/db'. Если используется опция -ws, * не пересекает границы каталога, но ** пересекает

Для DOS и Windows [список] теперь отключен, если не используется новая опция -RE включить сопоставление [списка] (регулярное выражение), чтобы избежать проблем с путями к файлам, содержащими "[" и "]":
zip files_ending_with_number -RE foo[0-9].c

Включать и исключать:

-i pattern pattern ... включать файлы, соответствующие шаблону
-x pattern pattern ... исключить файлы, соответствующие шаблону
Шаблоны - это пути с необязательными подстановочными знаками и совпадающие пути, сохраненные в архиве. Списки исключения и включения заканчиваются следующей опцией, @ или концом строки.
zip -x pattern pattern @ zipfile path path ...

Соответствие случаю:

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

Перевод в конце строки (только текстовые файлы):

-l изменить конец строки CR или LF (в зависимости от ОС) на CR LF (Unix->Win)
-ll изменить CR LF на CR или LF (в зависимости от ОС) конец строки (Win->Unix)
Если первый буфер, считанный из файла, содержит двоичный файл, перевод пропускается

Рекурсия:

-r рекурсивные пути, включение файлов во вложенные папки: zip -r a path path ...
-R рекурсивно использовать текущий каталог и сопоставлять шаблоны: zip -R a ptn ptn ...
Используйте -i и -x для включения или исключения путей Корневой путь в архиве начинается с текущего каталога, поэтому, если /a/b/c/file и текущий каталог /a/b, 'zip -r archive .' помещает c/file в архив

Фильтрация по дате:

-t date исключить ранее (включить файлы, измененные на эту дату и позже)
-tt date включить до (включить файлы, измененные до даты)
Можно использовать оба варианта одновременно для установки диапазона дат
Даты указаны в формате mmddyyyy или yyyy-mm-dd

Удаление, Синхронизация файлов:

-d удаление файлов

Удаление записей архива, соответствующих внутренним путям к архиву в списке
zip archive -d pattern pattern ...
Можно использовать -t и -tt для выбора файлов в архиве, но НЕ -x или -i, поэтому
zip archive -d "*" -t 2005-12-27
удаляет все файлы из archive.zip с датой 27 декабря 2005 года и более поздними версиями
Обратите внимание на * (escape как "*" в Unix), чтобы выбрать все файлы в архиве

-FS синхронизация файлов

Аналогично обновлению, но файлы обновляются, если дата или размер записи не соответствуют файлу в ОС. Также удаляет запись из архива, если в ОС нет соответствующего файла.
zip archive_to_update -FS -r dir_used_before
Результат, как правило, такой же, как при создании нового архива, но неизмененные записи копируются вместо чтения и сжатия, что может быть быстрее.
ПРЕДУПРЕЖДЕНИЕ: -FS удаляет записи, поэтому сначала сделайте резервную копию архива

Компрессия:

-0 хранить файлы (без сжатия)
от -1 до -9 сжатие быстрее всего до наилучшего сжатия (по умолчанию равно 6)
-Z cm установить метод сжатия в см:
store - хранить без сжатия, так же, как опция -0
deflate - исходный zip-архив, то же, что и от -1 до -9 (по умолчанию)
если bzip2 включен:
bzip2 - использовать сжатие bzip2 (нужна современная распаковка)

Шифрование:

-e использовать стандартное (слабое) шифрование PKZip 2.0, запрашивает пароль
-P pswd использовать стандартное шифрование, пароль - pswd

Разбиения (архивы, созданные в виде набора разделенных файлов):
-s ssize создать разделенный архив с частями размера ssize, где ssize nm
число n и множитель m (kmgt, по умолчанию m), 100k -> 100 кБ
-sp делать паузу после закрытия каждого разделения, чтобы можно было менять диски
ПРЕДУПРЕЖДЕНИЕ: Архивы, созданные с помощью -sp, используют дескрипторы данных и должны работать с большинством распаковок, но могут не работать с некоторыми
-sb звонит в колокольчик при паузе
-sv быть подробным о создании частей
Разделенные архивы НЕ МОГУТ быть обновлены, но см. --out и режим копирования ниже

Использование --out (вывод в новый архив):

--out oa вывод в новый архив oa Вместо обновления входного архива создайте новый выходной архив oa. Результат тот же, что и без --out, но в новом архиве. Входной архив
без изменений.
ПРЕДУПРЕЖДЕНИЕ: --out ВСЕГДА перезаписывает любой существующий выходной файл
Например, чтобы создать new_archive, подобный old_archive, но добавить newfile1 и newfile2:
zip old_archive newfile1 newfile2 --out new_archive
Не удается обновить разделенный архив, поэтому используйте --out для вывода нового архива:
zip in_split_archive newfile1 newfile2 --out out_split_archive
Если входные данные разделены, выходные данные по умолчанию будут иметь тот же размер разделения
Используйте -s=0 или -s-, чтобы отключить разделение для преобразования разделения в один файл:
zip in_split_archive -s 0 --out out_single_file_archive
ПРЕДУПРЕЖДЕНИЕ: Если перезаписать старый разделенный архив, но требуется меньше разбиений, старые не перезаписанные разбиения не нужны, но остаются

Режим копирования (копирование из архива в архив):

-U (также --copy) выберите записи в архиве для копирования (обратное удаление)
Режим копирования копирует записи из старого архива в новый с помощью --out и используется zip, когда либо не используются входные файлы в командной строке, либо -U (--copy).
zip inarchive --copy pattern pattern ... --out outarchive
Копировать в новый архив только файлы, соответствующие *.c, исключая foo.c:
zip old_archive --copy "*.c" --out new_archive -x foo.c
Если нет входных файлов и --out, скопируйте все записи в старый архив:
zip old_archive --out new_archive

Потоковое вещание и FIFOs:

prog1 | zip -ll z - zip-вывод prog1 в zip-файл z, преобразующий CR LF
zip - -R "*.c" | prog2 архивирует файлы *.c в текущем каталоге и передаёт в prog2
prog1 | zip | prog2 zip в канале без входа или выхода действует как zip - - Если Zip включен с поддержкой Zip64, потоковый stdin по умолчанию создает архивы Zip64, для которых требуется разархиватор PKZip 4.5, подобный UnZip 6.0
WARNING: Некоторые архивы, созданные с помощью потоковой передачи, используют дескрипторы данных и должны работать с большинством распаковок, но могут не работать с некоторыми. Можно использовать -fz- для отключения Zip64, если входные данные невелики (< 4 ГБ):
prog_with_small_output | zip archive -fz-

Zip теперь может читать Unix FIFO (именованные каналы). Выключено по умолчанию, чтобы предотвратить неожиданную остановку zip на незаполненном канале, используйте -FI для включения:
zip -FI archive fifo

Точки, отсчеты:

-db отображение текущего количества обработанных байтов и оставшихся байтов (несжатый размер, за исключением удаления и копирования, отображающих сохраненный размер)
-dc отображение текущего количества выполненных записей и предстоящих записей
-dd отображение точек каждые 10 МБ (или размер точки) при обработке файлов
-dg отображение точек глобально для архива, а не для каждого файла
zip -qdgds 10m отключит большую часть выходных данных, за исключением точек каждые 10 МБ
-ds siz каждая точка обрабатывается siz, где siz - это nm в виде разбиений (0 без точек)
-du отображение исходного несжатого размера для каждой добавленной записи
-dv отображение номера тома (диска) в формате in_disk>out_disk
Размер точки является приблизительным, особенно для точек размером менее 1 МБ
Параметры точки не применяются к сканированию файлов точками (точка/2 секунды) (-q выключается)

Регистрация:

-lf path открыть файл по пути как файл журнала (перезаписать существующий файл)
-la добавить к существующему файлу журнала
-li включить информационные сообщения (по умолчанию только предупреждения и ошибки)

Тестирование архивов:

-T тест завершенного временного архива с распаковкой перед обновлением архива
-TT cmd используйте команду cmd вместо 'unzip -tqq' для тестирования архива
В Unix, чтобы использовать unzip в текущем каталоге, можно использовать:
zip archive file1 file2 -T -TT "./unzip -tqq"
В cmd {} заменено на путь к временному архиву, остальное время добавляется.
Код возврата проверяется на успешность (0 в Unix)

Исправление архивов:

-F попытка исправить в основном неповрежденный архив (сначала попробуйте это)
-FF попытайтесь спасти то, что может (может стать больше, но менее надежным)
Исправлены параметры копирования записей из потенциально поврежденного архива в новый архив.
-F пытается нормально прочитать архив и скопировать только неповрежденные записи, в то время как
-FF пытается спасти то, что может привести к неполным записям.
Необходимо использовать опцию --out для указания выходного архива:
zip -F bad.zip --out fixed.zip
Используйте -v (подробный) с -FF, чтобы увидеть подробности:
zip reallybad.zip -FF -v --out fixed.zip
В настоящее время ни один из вариантов не исправляет неправильные записи, так как из текстового режима ftp получает.

Разностный режим:

-DF (также --dif) для создания инкрементных резервных копий можно использовать только те файлы, которые изменились или являются новыми по сравнению с исходным архивом.
Например:
zip --dif full_backup.zip -r somedir --out diff.zip
будет хранить все новые файлы, а также любые файлы в full_backup.zip где время или размер файла изменились по сравнению с тем, что в full_backup.zip , в новом diff.zip . Выходной архив не исключается автоматически, если он существует, поэтому либо используйте -x, чтобы исключить его, либо поместите за пределы того, что архивируется.

Бит архива DOS (только для Windows):

-AS включать только файлы с установленным битом архива DOS
-AC после создания архива очистите архивный бит от включенных файлов
ПРЕДУПРЕЖДЕНИЕ: После очистки битов архива они очищаются Используйте -T для проверки архива перед очисткой битов Также можно использовать -sf для сохранения списка файлов перед архивированием файлов

Показывать файлы:

-sf показывать файлы для работы и выхода (только -sf- файл журнала)
-su как -sf, но также показывать экранированные имена Unicode UTF-8, если они существуют
-sU как -sf, но вместо этого показывать экранированные имена Unicode UTF-8
Любой символ, не относящийся к текущей локали, экранируется как #Uxxxx, где x — шестнадцатеричная цифра, если достаточно 16-битного кода, или #Lxxxxxx, если требуются 24-битные. Если добавить -UN=e, Zip экранирует все символы, отличные от ASCII.

Юникод:

Если скомпилирован с поддержкой Unicode, Zip сохраняет пути записей UTF-8.
Это обратно совместимо. Пути Unicode позволяют лучше преобразовывать имена записей между различными наборами символов.

Новое дополнительное поле Unicode включает контрольную сумму для проверки того, что путь Unicode соответствует стандартному пути для этой записи (поскольку такие утилиты, как ZipNote, могут переименовывать записи). Если они не совпадают, используйте параметры ниже, чтобы указать, что делает Zip:
-UN=Quit - если несоответствие, выйти с ошибкой
-UN=Warn - при несоответствии предупреждать, игнорировать UTF-8 (по умолчанию)
-UN=Ignore - если несоответствие, спокойно игнорируйте UTF-8
-UN=No - игнорировать любые пути UTF-8, использовать стандартные пути для всех
Исключением для -UN=N являются записи с новым набором битов UTF-8 (вместо использования дополнительных полей). Они всегда обрабатываются как Unicode.

Обычно Zip экранирует все символы за пределами текущего набора символов, но оставляет поддерживаемые символы, что может быть недопустимым в именах путей. -UN=Escape экранирует любой символ, кроме ASCII:
zip -sU -UN=e archive
Можно использовать как обычный путь, так и экранированный путь Unicode в командной строке для сопоставления файлов в архиве.

Zip теперь сохраняет UTF-8 в пути ввода и полях комментариев в системах, где по умолчанию используется набор символов UTF-8, таких как большинство современных Unix, а также в других системах в новых дополнительных полях с экранированными версиями в пути ввода и полях комментариев для обратной совместимости. . Опция -UN=UTF8 принудительно сохраняет UTF-8 в полях пути входа и комментариев:
-UN=UTF8 - сохранить UTF-8 в пути ввода и полях комментариев
Этот параметр может быть полезен для многобайтовых наборов символов в Windows, где экранированные пути и комментарии могут быть слишком длинными, чтобы быть действительными, поскольку версии UTF-8, как правило, короче.

Поддерживаются только комментарии UTF-8 в собственных системах UTF-8. Комментарии UTF-8 для других систем запланированы в следующем выпуске.

Самоэкстрактор:

-A Отрегулируйте смещения — самораспаковщик создается путем добавления исполняемого файла экстрактора к архиву, но внутренние смещения при этом отключаются. Используйте -A, чтобы исправить смещения.
-J Junk sfx — удаляет предустановленный исполняемый файл экстрактора из самораспаковщика, оставляя простой zip-архив.

Дополнительные основные параметры (дополнительные опции и подробности см. в руководстве):

-b dir при создании или обновлении архива создайте временный архив в каталоге, что позволяет использовать доступный для поиска временный файл при записи на компакт-диск с однократной записью, такие архивы совместимы с большим количеством распаковок (может потребоваться дополнительная копия файла, если на другом устройстве)
-MM входные шаблоны должны соответствовать хотя бы одному файлу, и соответствующие файлы должны быть доступны для чтения или завершиться с ошибкой OPEN и прервать архив (без -MM оба являются только предупреждениями, и если нечитаемые файлы пропущены, ошибка OPEN (18) возвращается после создания архива)
-nw без подстановочных знаков (подстановочные знаки - это как любой другой символ)
-sc показать аргументы командной строки как обработанные и выйти
-sd показать отладку, как Zip выполняет каждый шаг
-so показать все доступные опции в этой системе
-X по умолчанию=удалить старые дополнительные поля, -X- оставить старые, -X удалить большинство (default=strip old extra fields, -X- keep old, -X strip most)
-ws подстановочные знаки не охватывают границы каталогов в путях