Как да архивирате или разархивирате файлове от терминала на 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. Те също присъстваха в Манджаро на 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

Всеки файл се посочва, когато е добавен. Показва се името на файла и степента на компресия, постигната върху този файл.

  Как лесно да изтегляте и инсталирате приложения на Linux с AppImage Pool

Ако погледнете новия 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 файла, го извлече, всички файлове се поставят спретнато в директория на компютъра им.

В следващата команда ще архивираме работната директория и всички поддиректории. Имайте предвид, че тази команда се издава от родителската директория на работната папка.

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) е 400K. Разликата между компресията по подразбиране и най-високото ниво на компресия (ниво 9) е само 4K.

Това може да не изглежда много, но за архиви, съдържащи стотици или дори хиляди файлове, малкото количество допълнителна компресия на файл би довело до полезно спестяване на място.

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

Добавянето на пароли към ZIP файлове е лесно. Използвайте опцията -e (шифроване) и ще бъдете подканени да въведете паролата си и да я въведете отново за проверка.

zip -e -r -q source_code work/

Как да разархивирате ZIP файл с командата unzip

За да извлечете файловете от ZIP файл, използвайте командата unzip и посочете името на ZIP файла. Имайте предвид, че трябва да предоставите разширението „.zip“.

unzip source_code.zip

Тъй като файловете се извличат, те се показват в прозореца на терминала.

  5-те най-добри екранни рекордери за Linux

ZIP файловете не съдържат подробности за собствеността на файла. Всички файлове, които се извличат, имат собственик, настроен на потребителя, който ги извлича.

Точно като zip, unzip има опция -q (тиха), така че не е необходимо да виждате списъка с файлове, докато файловете се извличат.

unzip -q source_code.zip

Извличане на файлове в целева директория

За да извлечете файловете в конкретна директория, използвайте опцията -d (директория) и посочете пътя до директорията, в която искате да бъде извлечен архивът.

unzip -q source_code.zip -d ./development

Извличане на защитени с парола ZIP файлове

Ако ZIP файл е създаден с парола, 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: Не, не презаписвайте този файл
О: Всички, презапишете всички файлове
N: Няма, не презаписвайте нито един от файловете
r: Преименувайте, извлечете този файл, но му дайте ново име. Ще бъдете подканени за ново име.

За да принудително разархивирате, за да презапишете всички съществуващи файлове, използвайте опцията -o (презаписване).

unzip -o -q source_code.zip

Най-ефективният начин да замените липсващите файлове би бил да разархивирате само всички файлове в архива, които не са в целевата директория. За да направите това, използвайте опцията -n (никога не презаписвайте).

unzip -n source_code.zip

Разглеждане вътре в ZIP файл

Често е полезно и поучително да видите списък с файловете в ZIP файл, преди да го извлечете. Можете да направите това с опцията -l (архив на списък). Провежда се по-малко, за да направи изхода управляем.

unzip -l source_code.zip | less

Резултатът показва директориите и файловете в ZIP файла, тяхната дължина и часа и датата на добавяне към архива. Натиснете “q”, за да излезете от по-малко.

  Как да играете Sony PSP игри на Linux с PPSSPP

Има и други начини да надникнете вътре в ZIP файл, които дават различни видове информация, както ще видим.

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

Ако сте създали ZIP файл, но сте забравили да добавите парола, какво можете да направите? Можете бързо да добавите парола към ZIP файл с помощта на командата zipcloak. Предайте името на ZIP файла в командния ред. Ще бъдете подканени за парола. Трябва да потвърдите паролата, като я въведете втори път.

zipcloak source_code.zip

Преглед на подробности за файла с командата zipdetails

Командата zipdetails ще ви покаже много информация относно ZIP файла. Единственият разумен начин да се справите с количеството продукция, която тази команда може да даде, е да я прехвърлите през по-малко.

zipdetails source_code.zip | less

Имайте предвид, че информацията ще включва имена на файлове, дори ако ZIP файлът е защитен с парола. Този тип информация се съхранява в ZIP файла като метаданни и не е част от криптираните данни.

Търсете във файла с командата zipgrep

Командата zipgrep ви позволява да търсите във файловете в ZIP файл. В следващия пример искаме да знаем кои файлове в ZIP файла имат текста „keyval.h“ в тях.

zipgrep keyval.h source_code.zip

Можем да видим, че файловете sleng.c и getval.c съдържат низа “keyval.h”. Можем също да видим, че има две копия на всеки от тези файлове в различни директории в ZIP файла.

Преглед на информация с командата zipinfo

Командата zipinfo ви дава още един начин да погледнете вътре в ZIP файл. Както преди, ние предаваме изхода през по-малко.

zipinfo source_code.zip | less

Отляво надясно изходът показва:

Разрешенията на файла
Версията на инструмента, използван за създаване на ZIP файл
Оригиналният размер на файла
Файлов дескриптор (описан по-долу)
Методът на компресия (дефлация, в този случай)
Данните и времевата марка
Името на файла и всяка директория

Файловият дескриптор се състои от два знака. Първият знак ще бъде „t“ или „b“, за да обозначи текстов или двоичен файл. Ако е главна буква, файлът е криптиран. Вторият знак може да бъде един от четирите знака. Този знак представлява какъв тип метаданни са включени за този файл: никакви, разширен локален заглавка, „допълнително поле“ или и двете.

-: Ако нито едно не съществува, символът ще бъде тире
l: ако има разширено локално заглавие, но няма допълнително поле
x: ако няма разширена локална заглавка, но има допълнително поле
X: ако има разширена локална заглавка и има допълнително поле

Разделете файла с командата zipsplit

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

Опцията -n (размер) ви позволява да зададете максимален размер за всеки от новите ZIP файлове. В този пример разделяме файла source_code.zip. Не искаме нито един от новите ZIP файлове да е по-голям от 100 KB (102400 байта).

zipsplit -n 102400 source_code.zip

Избраният от вас размер не може да бъде по-малък от размера на който и да е от файловете в ZIP файла.

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