Поиск по сайту:

Как заархивировать или разархивировать файлы из терминала Linux


ZIP-файлы — это универсальный архив, обычно используемый в системах Windows, macOS и даже Linux. Вы можете создать zip-архив или распаковать файлы из него с помощью некоторых распространенных команд терминала Linux.

Формат сжатого архива ZIP

Благодаря доминированию формата ZIP в среде Windows, ZIP-файлы, вероятно, являются наиболее распространенной формой сжатого архива в мире.

Хотя файлы .tar.gz и tar.bz2 распространены в Linux, пользователи Windows, вероятно, отправят вам архив в формате ZIP. И, если вы хотите заархивировать некоторые файлы и отправить их пользователю Windows, формат ZIP будет самым простым и совместимым решением для всех.

zip, unzip и другие утилиты

Возможно, вы уже знаете, что Linux и Unix-подобные операционные системы, такие как macOS, имеют инструменты, позволяющие создавать ZIP-файлы и извлекать из них файлы, называемые zip и unzip. Но есть целое семейство связанных утилит, таких как zipcloak, zipdetails, zipsplit и zipinfo.

Мы проверили некоторые дистрибутивы Linux, чтобы узнать, включают ли они эти утилиты в стандартную установку. Все утилиты присутствовали в Ubuntu 19.04, 18.10 и 18.04. Они также присутствовали в Manjaro 18.04. Fedora 29 включала zip и unzip, но ни одну из других утилит, и это также имело место для CentOS.

Чтобы установить недостающие элементы в Fedora 29, используйте следующую команду:

sudo dnf install perl-IO-Compress

Чтобы установить недостающие элементы в CentOS 7, используйте следующую команду:

sudo yum install perl-IO-Compress

Если какие-либо утилиты zip отсутствуют в дистрибутиве Linux, не упомянутом выше, используйте инструмент управления пакетами этого дистрибутива Linux для установки необходимого пакета.

Как создать ZIP-файл с помощью команды zip

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

Чтобы создать файл с именем source_code.zip, содержащий все файлы исходного кода C и файлы заголовков в текущем каталоге, вы должны использовать эту команду:

zip source_code *.c *.h

Каждый файл отображается по мере его добавления. Отображается имя файла и степень сжатия, достигнутая для этого файла.

Если вы посмотрите на новый ZIP-архив, вы увидите, что расширение «.zip» было добавлено автоматически с помощью zip.

ls -l source_code.zip

Если вы не хотите видеть вывод из zip при создании ZIP-файла, используйте параметр -q (тихий).

zip -q source_code *.c *.h

Включение каталогов в ZIP-файлы

Чтобы включить подкаталоги в ZIP-файл, используйте параметр -r (рекурсивный) и укажите имя подкаталога в командной строке. Чтобы создать ZIP-файл, как и раньше, а также включить в него подкаталог архива, используйте эту команду.

zip -r -q source_code archive/ *.c *.h

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

В следующей команде мы собираемся заархивировать каталог work и все подкаталоги. Обратите внимание, что эта команда запускается из родительского каталога папки work.

zip -r -q source_code work/

Установка уровня сжатия

Вы можете установить степень сжатия файлов при их добавлении в ZIP-архив. Диапазон значений от 0 до 9, где 0 означает полное отсутствие сжатия. Чем выше степень сжатия, тем больше времени требуется для создания ZIP-файла. Для ZIP-файлов небольшого размера разница во времени не является значительным штрафом. Но тогда для ZIP-файлов небольшого размера стандартное сжатие (уровень 6), вероятно, в любом случае будет достаточно хорошим.

Чтобы заставить zip использовать определенный уровень сжатия, передайте число как параметр в командной строке со знаком «-», например:

zip -0 -r -q source_code work/

Уровень сжатия по умолчанию равен 6. Нет необходимости указывать параметр -6, но если вы это сделаете, это не повредит.

zip -r -q source_code work/

Максимальный уровень сжатия — уровень 9.

zip -9 -r -q source_code work/

При выборе файлов и каталогов, архивируемых здесь, разница между отсутствием сжатия (уровень 0) и сжатием по умолчанию (уровень 6) составляет 400 КБ. Разница между сжатием по умолчанию и самым высоким уровнем сжатия (уровень 9) составляет всего 4K.

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

Добавление паролей к ZIP-файлам

Добавлять пароли к ZIP-файлам очень просто. Используйте опцию -e (зашифровать), и вам будет предложено ввести свой пароль и ввести его повторно для проверки.

zip -e -r -q source_code work/

Как разархивировать ZIP-файл с помощью команды unzip

Чтобы извлечь файлы из ZIP-файла, используйте команду unzip и укажите имя ZIP-файла. Обратите внимание, что вам нужно указать расширение «.zip».

unzip source_code.zip

По мере извлечения файлов они отображаются в окне терминала.

ZIP-файлы не содержат информации о владении файлом. У всех извлекаемых файлов владельцем является пользователь, который их извлекает.

Как и zip, unzip имеет параметр -q (тихий), поэтому вам не нужно видеть список файлов, так как файлы извлечено.

unzip -q source_code.zip

Извлечение файлов в целевой каталог

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

unzip -q source_code.zip -d ./development

Извлечь ZIP-файлы, защищенные паролем

Если ZIP-файл был создан с паролем, unzip запросит у вас пароль. Если вы не укажете правильный пароль, unzip не извлечет файлы.

unzip -q source_code.zip

Если вас не волнует, что ваш пароль увидят другие, а также то, что он будет сохранен в вашей истории команд, вы можете указать пароль в командной строке с помощью параметра -P (пароль). (Вы должны использовать заглавную «П.»)

unzip -P fifty.treacle.cutlass -q source_code.zip

Исключение файлов

Если вы не хотите извлекать определенный файл или группу файлов, используйте параметр -x (исключить). В этом примере мы хотим извлечь все файлы, кроме тех, которые заканчиваются расширением «.h».

unzip -q source_code.zip -x *.h

Перезапись файлов

Предположим, вы распаковали архив, но по ошибке удалили несколько извлеченных файлов.

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

За исключением ответа r (переименовать), эти ответы чувствительны к регистру.

  • y: Да, перезаписать этот файл
  • n: Нет, не перезаписывать этот файл
  • О: Все, перезаписать все файлы
  • Н: Нет, не перезаписывать ни один из файлов
  • r: переименуйте, извлеките этот файл, но дайте ему новое имя. Вам будет предложено ввести новое имя.

Чтобы заставить unzip перезаписать любые существующие файлы, используйте параметр -o (перезаписать).

unzip -o -q source_code.zip

Наиболее эффективным способом замены отсутствующих файлов будет использование unzip для извлечения из архива только тех файлов, которые не находятся в целевом каталоге. Для этого используйте параметр -n (никогда не перезаписывать).

unzip -n source_code.zip

Заглянуть внутрь ZIP-файла

Часто бывает полезно и поучительно просмотреть список файлов внутри ZIP-файла перед его извлечением. Вы можете сделать это с помощью опции -l (список архивов). Он передается через less, чтобы сделать вывод управляемым.

unzip -l source_code.zip | less

Вывод показывает каталоги и файлы в ZIP-файле, их длину, а также время и дату добавления в архив. Нажмите «q», чтобы выйти из less.

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

Добавьте пароль с помощью команды zipcloak

Если вы создали ZIP-файл, но забыли добавить пароль, что вы можете сделать? Вы можете быстро добавить пароль к ZIP-файлу с помощью команды zipcloak. Передайте имя ZIP-файла в командной строке. Вам будет предложено ввести пароль. Вам необходимо подтвердить пароль, введя его второй раз.

zipcloak source_code.zip

Просмотр сведений о файле с помощью команды zipdetails

Команда zipdetails покажет вам много информации о ZIP-файле. Единственный разумный способ справиться с объемом вывода, который может дать эта команда, — передать его через less .

zipdetails source_code.zip | less

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

Поиск внутри файла с помощью команды zipgrep

Команда zipgrep позволяет выполнять поиск внутри файлов в ZIP-файле. В следующем примере мы хотим узнать, какие файлы в ZIP-файле содержат текст «keyval.h».

zipgrep keyval.h source_code.zip

Мы видим, что файлы slang.c и getval.c содержат строку «keyval.h». Мы также видим, что есть две копии каждого из этих файлов. в разных каталогах ZIP-файла.

Просмотр информации с помощью команды zipinfo

Команда zipinfo дает вам еще один способ заглянуть внутрь ZIP-файла. Как и раньше, мы передаем вывод через less.

zipinfo source_code.zip | less

Слева направо вывод показывает:

  • Права доступа к файлам
  • Версия инструмента, использованного для создания ZIP-файла.
  • Исходный размер файла
  • Описатель файла (описан ниже)
  • Метод сжатия (в данном случае дефляция)
  • Данные и отметка времени
  • Имя файла и любого каталога

Дескриптор файла состоит из двух символов. Первым символом будет t или b, чтобы указать текстовый или двоичный файл. Если это заглавная буква, файл зашифрован. Второй символ может быть одним из четырех символов. Этот символ указывает, какой тип метаданных включен в этот файл: нет, расширенный локальный заголовок, «дополнительное поле» или и то, и другое.

  • -: Если ни один из них не существует, символ будет дефисом.
  • l: если есть расширенный локальный заголовок, но нет дополнительного поля
  • x: если нет расширенного локального заголовка, но есть дополнительное поле
  • X, если есть расширенный локальный заголовок и дополнительное поле

Разделите файл с помощью команды zipsplit

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

Опция -n (размер) позволяет установить максимальный размер для каждого из новых ZIP-файлов. В этом примере мы разделяем файл source_code.zip. Мы не хотим, чтобы какой-либо из новых ZIP-файлов был больше 100 КБ (102400 байт).

zipsplit -n 102400 source_code.zip

Выбранный вами размер не может быть меньше размера любого из файлов в ZIP-файле.

Используя эти команды, вы можете создавать свои собственные ZIP-файлы, распаковывать полученные ZIP-файлы и выполнять с ними различные другие операции, даже не выходя из терминала Linux.

RELATED: Best Linux Laptops for Developers and Enthusiasts