Как заархивировать файлы и каталоги в Linux с помощью Zip-архива

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

Архив ZIP может содержать один или несколько сжатых файлов или папок. Формат файлов ZIP поддерживает различные методы сжатия.

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

Программа zip должна быть установлена в нашей системе Linux, прежде чем мы сможем ее использовать. В большинстве дистрибутивов Linux программа zip не установлена по умолчанию.

Установка утилиты Zip в Linux

Если вы используете системы Linux на базе Debian или Ubuntu, воспользуйтесь утилитой apt, чтобы установить программу zip. Введите следующее:

sudo apt-get install zip

В дистрибутивах на базе Redhat или CentOS используйте утилиту dnf. Введите:

sudo dnf install zip

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

Основные возможности использования команды zip

Команда zip обладает базовыми функциями сжатия, извлечения и изменения архивного файла ZIP. Общий синтаксис команды zip выглядит следующим образом:

zip [-options] [имя архива] [список zip-файлов].

Здесь [список zip-файлов] указывает на поле для указания списка файлов, которые будут использоваться командой.

Примечание: Команда zip не сохраняет разрешения файлов/папок в архиве. В этих случаях следует использовать команду tar. Архивы tar сохраняют права доступа к файлам в Linux.

Для получения базовой справки по команде zip используйте zip -h. Для получения дополнительных опций и подробной страницы справки введите:

zip -h

Теперь давайте рассмотрим некоторые задачи, которые можно выполнить с помощью команды zip.

Мы начнем с того, как сжимать файлы и папки, а затем перейдем к дополнительным функциям.

Как сжать несколько файлов вместе

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

Синтаксис команды следующий:

zip archive_name.zip filename1 filename2 filename3 …

Вот пример того, как будет выглядеть команда:

zip new.zip file.txt file num.txt tutorial.firstpage.php

Выход

adding: file.txt (deflated 13%)
adding: file (deflated 13%)
adding: num.txt (stored 0%)
adding: tutorial.firstpage.php (deflated 73%)

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

Например, файл tutorial.firstpage.php был сжат сильнее всего, а файл num.txt вообще не был сжат, а только сохранен в zip-архиве.

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

Как посмотреть содержимое Zip-файла

Вы можете просмотреть содержимое zip-файла, не распаковывая его. Для этого нужно использовать флаг -sf или show files.

Давайте посмотрим на содержимое только что созданного zip-файла:

zip -sf new.zip

Вывод

Archive contains:
file.txt
file
num.txt
tutorial.firstpage.php
Total 4 entries (24524 bytes)

На выходе показаны четыре файла, которые мы включили в предыдущую команду, как и ожидалось.

Как заархивировать несколько каталогов вместе

Мы уже показали вам, как заархивировать несколько файлов вместе.

Теперь давайте рассмотрим, как можно заархивировать папки или каталоги. Для этого мы воспользуемся опцией recursive с флагом -r.

Синтаксис команды показан ниже:

zip -r имя_каталога1 имя_каталога2 имя_каталога3

Вот пример создания zip-файла с несколькими директориями и файлами:

zip -r new_dir.zip dir1 dir2 num.txt

Выход

adding: dir1/ (stored 0%)
adding: dir1/file (deflated 13%)
adding: dir1/file.log (deflated 98%)
adding: dir2/ (stored 0%)
adding: dir2/file.txt (deflated 13%)
adding: dir2/pr_ex_creator.txt (stored 0%)
adding: dir2/tutorial.firstpage.php (deflated 73%)
adding: num.txt (stored 0%)

Из вывода видно, что две директории (dir1 и dir2) вместе с текстовым файлом (num.txt) были добавлены в zip-архив (new_dir.zip).

Здесь используется флаг -r, чтобы убедиться, что команда zip рекурсивно проходит по всем каталогам и добавляет все файлы в архив.

Давайте посмотрим, как выглядит содержимое внутри zip-файла с каталогами с помощью флага -sf, который вы изучили ранее:

zip -sf new_dir.zip

Вывод

Archive contains:
dir1/
dir1/file
dir1/file.log
dir2/
dir2/file.txt
dir2/pr_ex_creator.txt
dir2/tutorial.firstpage.php
num.txt
Total 8 entries (34764 bytes)

Как вы можете видеть, папка dir1 содержит 2 файла, а папка dir2 содержит 3 файла

Как разархивировать Zip-файл

Теперь, когда вы узнали, как создать zip-файл с файлами и папками, мы кратко рассмотрим, как извлечь их с помощью команды unzip.

Команда unzip предустановлена в большинстве дистрибутивов Linux.

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

unzip имя_архива.zip

Давайте посмотрим на это в действии:

unzip new.zip

Выход

Archive:  new.zip 
inflating: file.txt 
inflating: file 
extracting: num.txt 
inflating: tutorial.firstpage.php

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

В zip-архивах сдувание означает сжатие, а раздувание — распаковку.

Изменение уровней и методов сжатия

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

Команда zip позволяет указать этот уровень с помощью числа от 0 до 9, где 0 означает отсутствие сжатия, а 9 — наилучшее сжатие. При использовании уровня сжатия 0 команда zip будет использовать функцию store и просто добавит его в архив. В то время как при использовании уровня 9 каждый файл будет сжат оптимально.

Вы можете указать уровень сжатия в синтаксисе команды.

Давайте рассмотрим несколько примеров и посмотрим, как изменяется процент deflate (сжатия) при использовании различных уровней сжатия:

Уровень сжатия 0

zip -0 zero_comp.zip tutorial.firstpage.php

Вывод

adding: tutorial.firstpage.php (stored 0%)

Уровень сжатия 5

zip -5 five_comp.zip tutorial.firstpage.php

Выход

updating: tutorial.firstpage.php (deflated 72%)

Уровень сжатия 9

zip -9 nine_comp.zip tutorial.firstpage.php

Вывод

updating: tutorial.firstpage.php (deflated 73%)

Как вы можете видеть, использование больших чисел приводит к большему проценту deflate или лучшему сжатию.
Теперь мы можем сравнить размер этих файлов, и вы увидите разницу:

ls -la | grep comp.zip

Выход

-rw-rw-rw- 1 edxd edxd 6878 Oct 16 17:58 five_comp.zip
-rw-rw-rw- 1 edxd edxd 6833 Oct 16 17:59 nine_comp.zip
-rw-rw-rw- 1 edxd edxd 24420 Oct 16 17:58 zero_comp.zip

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

Между уровнем 5 и уровнем 9, файл, сжатый уровнем 9 — nine_comp.zip имеет наименьший размер файла, хотя разница очень мала.

Теперь поговорим о различных методах сжатия, которые вы можете использовать в zip.

Формат файлов Zip поддерживает несколько алгоритмов сжатия. По умолчанию он использует алгоритм DEFLATE. Вы можете изменить алгоритм сжатия с помощью флага -Z.

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

zip -Z bzip2 bzip_method.zip tutorial.firstpage.php

Выход

adding: tutorial.firstpage.php (bzipped 73%)

Вот так можно использовать различные алгоритмы сжатия, если они поддерживаются форматом zip-файла.

Обновление или добавление новых файлов в Zip-файл

В этом разделе мы покажем вам, как можно обновить zip-архив с помощью команды zip.

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

Для этого мы можем использовать флаг -u или update.

Давайте рассмотрим два примера.

В начале статьи мы создали zip-файл с именем new.zip. Мы обновим этот zip-файл, добавив в архив новый файл. Сначала давайте еще раз посмотрим на содержимое zip-файла:

zip -sf new.zip

Вывод

Archive contains: 
file.txt
file 
num.txt 
tutorial.firstpage.php 
Total 4 entries (24524 bytes)

Теперь давайте добавим файл в этот архив:

zip -u new.zip newfile

Выход

adding: newfile (stored 0%)

Чтобы добавить новый каталог, можно использовать флаг -r в сочетании с флагом -u:

zip -ur new.zip dir1

Вывод

adding: dir1/ (stored 0%)
adding: dir1/file (deflated 13%)
adding: dir1/file.log (deflated 98%)

Теперь давайте посмотрим на содержимое обновленного zip-файла:

zip -sf new.zip

Выход

Archive contains:
file.txt
file
num.txt
tutorial.firstpage.php
newfile
dir1/
dir1/file
dir1/file.log
Total 8 entries (34911 bytes)

Как видите, файл с именем newfile и каталог dir1 был добавлен в архив new.zip.

Извлечь все файлы с определенным типом файла

Допустим, вы хотите извлечь из архива все файлы с одинаковым расширением. В этом случае вы можете использовать подстановочный знак типа *.extension. Здесь вы можете использовать конкретное расширение. Например, если бы вы хотели извлечь все текстовые файлы, вы бы использовали *.txt.

Давайте посмотрим это в действии.

Во-первых, давайте посмотрим на наш текущий каталог:

ls

Вывод

dir1
file
file_comp.zip
new.zip
new_file.txt
newfile
nine_comp.zip
num.txt
tutorial.firstpage.php
zero_comp.zip

В этой директории находятся три текстовых файла. Теперь давайте создадим zip-архив с этими текстовыми файлами, используя подстановочный знак:

zip text_archive.zip *.txt

Выход

adding: file.txt (deflated 13%)
adding: new_file.txt (stored 0%)
adding: num.txt (stored 0%)

Из вывода видно, что эти три текстовых файла были использованы для создания файла text_archive.zip. Вот как можно использовать подстановочные знаки, чтобы заархивировать все файлы с определенным расширением.

Создание защищенного паролем Zip-файла

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

Вот как это выглядит:

zip -e encrypted_archive.zip num.txt file.txt

Выход

Enter password:   
Verify password:
adding: num.txt (stored 0%)
adding: file.txt (deflated 13%)

Или вы можете использовать флаг -P, чтобы указать пароль в одной команде:

zip -e -P 'supersecretpaswd' encrypted_archive.zip num.txt file.txt

Выход

updating: num.txt (stored 0%)
updating: file.txt (deflated 13%)

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

Разделение Zip-файлов на части

У вас также есть возможность разделить zip-архив на более мелкие файлы в соответствии с заданным лимитом размера. Для этого мы используем флаг -s.

Ограничение по размеру должно быть указано после флага. Размер может быть указан с помощью k (килобайт), m (мегабайт), g (гигабайт) и t (терабайт).

Это станет понятно, когда вы увидите приведенный ниже пример:

zip -s 100k split_archive.zip undergrad_buet.pdf

Выход

adding: undergrad_buet.pdf (deflated 8%)

Размер этого pdf-файла составил чуть более 600 килобайт. Таким образом, в нашей текущей рабочей директории должно быть 6 разделенных архивов. Давайте выполним команду ls с grep, чтобы найти их:

ls | grep split

Выход

split_archive.z01
split_archive.z02
split_archive.z03
split_archive.z04
split_archive.z05
split_archive.zip

Как вы можете видеть, команда действительно разделила архив на 6 частей.

Заключение

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

Если вы все еще не знаете, как использовать команду zip, по возможности используйте графический интерфейс пользователя. Благодарим вас за прочтение статьи. Мы надеемся, что вы узнали что-то новое из этого руководства. Если у вас есть вопросы, не стесняйтесь оставлять комментарии, и мы ответим вам как можно скорее.

Поделитесь с друзьями
FOX
FOX

Люблю что-то новое

Статей: 126

Добавить комментарий

0 комментариев
Новіші
Старіші Найпопулярніші
Вбудовані Відгуки
Переглянути всі коментарі
0
Ми любимо ваші думки, будь ласка, прокоментуйте.x