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

ZIP файловете са универсален архив, често използван в Windows, macOS и дори Linux системи. Можете да създадете zip архив или да разархивирате файлове от такъв с някои често срещани команди на терминала на Linux.

Форматът на ZIP компресиран архивен файл

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

Докато .tar.gz и tar.bz2 файловете са често срещани в Linux, потребителите на Windows вероятно ще ви изпратят архив в ZIP формат. И ако искате да архивирате някои файлове и да ги изпратите на потребител на Windows, ZIP форматът ще бъде най-лесното и съвместимо решение за всички.

СВЪРЗАНИ: Как да извлечете файлове от .tar.gz или .tar.bz2 файл на Linux

zip, разархивирайте и други помощни програми

Може би вече знаете, че 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 инсталирайте perl-IO-Compress

За да инсталирате липсващите елементи на CentOS 7, използвайте следната команда:

sudo yum инсталирайте perl-IO-Compress

Ако някоя от zip помощните програми липсва в дистрибуция на Linux, която не е спомената по-горе, използвайте инструмента за управление на пакети на тази дистрибуция, за да инсталирате необходимия пакет.

Как да създадете ZIP файл с командата zip

За да създадете ZIP файл, трябва да кажете zipимето на архивния файл и кои файлове да включите в него. Не е необходимо да добавяте разширението „.zip“ към името на архива, но това не вреди, ако го направите.

За да създадете файл, наречен, source_code.zipсъдържащ всички файлове с изходен код и заглавни файлове в текущата директория, трябва да използвате тази команда:

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 работа /

Настройване на нивото на компресия

Можете да зададете колко компресия да се прилага към файловете, докато те се добавят към ZIP архива. Диапазонът е от 0 до 9, като 0 изобщо няма компресия. Колкото по-висока е компресията, толкова повече време отнема създаването на ZIP файла. За умерено големи ZIP файлове, часовата разлика не е значително наказание. Но тогава, за скромен размер ZIP файлове, компресията по подразбиране (ниво 6) вероятно е достатъчно добра.

За zipда използвате конкретно ниво на компресия, предайте номера като опция в командния ред, като „-“, ето така:

zip -0 -r -q source_code работа /

Нивото на компресия по подразбиране е 6. Няма нужда да предоставяте -6опцията, но няма да навреди, ако го направите.

zip -r -q source_code работа /

Максималното ниво на компресия е ниво 9.

zip -9 -r -q source_code работа /

С избора на файлове и директории, които се архивират тук, разликата между липса на компресия (ниво 0) и компресията по подразбиране (ниво 6) е 400K. Разликата между компресията по подразбиране и най-високото ниво на компресия (ниво 9) е само 4K.

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

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

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

zip -e -r -q source_code работа /

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

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

разархивирайте 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(парола). (Трябва да използвате главна буква „P.“)

разархивирайте -P fifty.treacle.cutlass -q source_code.zip

Без файлове

Ако не искате да извличате определен файл или група файлове, използвайте опцията -x(изключване). В този пример искаме да извлечем всички файлове, с изключение на тези, завършващи с разширение „.h“.

unzip -q source_code.zip -x * .h

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

Да предположим, че сте извлекли архив, но сте изтрили няколко от извлечените файлове по погрешка.

Бързо решение за това би било да извлечете файловете отново. Но ако се опитате да извлечете ZIP файла в същата директория като преди, unzipще ви подканим за решение относно презаписването на файловете. Очаква се един от следните отговори.

Освен rотговора (преименуване), тези отговори са чувствителни към малки и големи букви.

  • y: Да, презапишете този файл
  • n: Не, не презаписвайте този файл
  • О: Всички, презапишете всички файлове
  • 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 | по-малко

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

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

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

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

zipcloak source_code.zip

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

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

zipdetails source_code.zip | по-малко

Имайте предвид, че информацията ще включва имена на файлове, дори ако 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 | по-малко

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

  • Разрешенията за файла
  • Версията на инструмента, използван за създаване на 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.