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, можна використовувати графічний інтерфейс користувача. Дякуємо вам за прочитання статті. Ми сподіваємося, що ви дізналися щось нове з цього посібника. Якщо у вас є питання, не соромтеся залишати коментарі, і ми відповімо вам якнайшвидше.