Обзор возможностей архиватора
В серверных средах на базе Linux формат ZIP остается одним из наиболее универсальных стандартов для обмена данными между разнородными ОС и экономии дискового пространства. Ниже детально разобран весь жизненный цикл работы с архивами через консоль Ubuntu: от первоначальной установки утилит и упаковки разрозненных файлов до рекурсивного сжатия каталогов, выборочного исключения путей и защищенного шифрования.
Подготовка окружения и базовые операции с zip
Для начала убедимся, что в операционной системе присутствуют необходимые бинарники; инсталляция пакетов zip и unzip выполняется стандартным менеджером APT:

Чтобы изолировать тестовые файлы и не засорять домашний каталог, создадим отдельную директорию ~/zip_demo и сразу сделаем её текущей:

Сформируем стартовый текстовый документ, записав тестовую строку в файл file1.txt:

Аналогичным образом создадим второй тестовый объект file2.txt, который также войдет в будущий архив:

Утилита zip объединяет указанные объекты файловой системы в компактный сжатый контейнер .zip. Для объединения file1.txt и file2.txt в архив с именем archive.zip вызываем команду, передав целевые файлы аргументами:
⚙️ [Ключевые параметры утилиты]
-r : осуществляет рекурсивный обход древовидной структуры каталогов вместе со всем содержимым.-e : запрашивает ввод пароля для интерактивного шифрования данных.-u : дополняет существующий архив только новыми или измененными файлами.-m : физически удаляет исходные файлы с накопителя сразу после успешной упаковки.-d : точечно извлекает и удаляет указанный компонент прямо из существующего архива.-q : активирует скрытный (тихий) режим без вывода подробных логов в консоль.-0 ~ -9 : регулирует степень компрессии (от 0 — простое сохранение без сжатия, до 9 — максимальная плотность).

Проверим итоговый размер полученного файла archive.zip и его файловые атрибуты с помощью команды ls -lh:

Рекурсивная упаковка каталогов (-r) и максимальное сжатие (-9)
Для экспериментов со сложной структурой каталогов вернемся в рабочее пространство ~/zip_demo:

Смоделируем типовую иерархию проекта, создав каталоги project/src для исходного кода и project/logs для журналов:

Поместим демонстрационный скрипт приложения project/src/app.js в папку с исходным кодом:

В каталог журналов поместим тестовый файл отчетов project/logs/app.log:

По умолчанию утилита не обрабатывает вложенные папки, поэтому для глубокого сканирования применяется ключ -r. Соберем всю структуру project в единый пакет project.zip:
В стандартном выводе наглядно видно, как архиватор последовательно проиндексировал все дочерние пути и элементы.

Когда критически важно минимизировать потребление дискового пространства или исходящий сетевой трафик, задействуют флаг -9 (максимальный уровень сжатия Deflate). Сформируем архив project_max.zip, скомбинировав его с рекурсией:

Сопоставим объем стандартного project.zip и сжатого с наивысшим приоритетом project_max.zip посредством утилиты ls:

Просмотр содержимого (-l) и распаковка в целевую папку (-d)
Перейдем в рабочую директорию ~/zip_demo перед выполнением операций распаковки:

Чтобы изучить состав архива без фактического извлечения данных на накопитель, воспользуемся ключом -l команды unzip. Консоль отобразит полную структуру, размеры файлов и временные метки:

Во избежание засорения текущей рабочей среды создадим отдельную директорию назначения ~/zip_demo/extracted:

Параметр -d перенаправляет распаковываемые объекты в конкретно указанный путь. Развернем архив project.zip прямо в созданную целевую папку:
Консольный отчет подтверждает точное воссоздание исходной иерархии каталогов и корректную декомпрессию файлов.

Убедимся в целостности распакованного дерева каталогов с помощью рекурсивного листинга ls -R:

Фильтрация файлов (-x) и создание зашифрованных архивов
Возвращаемся в исходную локацию ~/zip_demo для отработки сценариев выборочной упаковки и криптографической защиты:

В процессе архивации часто требуется отсечь временные файлы, дампы или журналы. Задав ключ -x с маской "*.log", запакуем проект в project_no_logs.zip, полностью проигнорировав служебные логи:
В консольном выводе видно, что обработка затронула исключительно программный код, обойдя файлы логов стороной.

Проинспектируем внутреннее содержимое полученного пакета project_no_logs.zip через ключ -l:
Таблица наглядно демонстрирует отсутствие app.log в списке упакованных единиц.

Для безопасного хранения конфиденциальных данных можно использовать встроенный парольный доступ. Параметр -P позволяет сразу передать парольную фразу в командной строке при рекурсивной упаковке каталога project/src в файл project_encrypted.zip:
Архив сформирован с применением защиты, и доступ к содержащимся в нем исходным текстам теперь закрыт паролем.

Оценим суммарный перечень созданных архивов и занимаемое ими дисковое пространство командой ls -lh:

Мы подробно изучили фундаментальные и специализированные приемы работы с утилитами zip и unzip в среде Ubuntu. Освоив представленные комбинации параметров, системные администраторы и разработчики могут эффективно автоматизировать рутинные задачи резервного копирования и оптимизировать передачу проектных данных через консоль Linux.