Cum să arhivați sau să dezarhivați fișierele de pe terminalul Linux

Arhivele ZIP sunt un format universal utilizat frecvent pe diverse sisteme, inclusiv Windows, macOS și Linux. În cadrul sistemelor Linux, se pot gestiona (crea sau extrage) fișiere din arhivele ZIP cu ajutorul unor comenzi simple, executate direct în terminal.

Formatul Arhivelor Comprimate ZIP

Formatul ZIP este dominant în mediul Windows, ceea ce îl face probabil cel mai răspândit tip de arhivă comprimată la nivel global.

Deși în Linux sunt populare formatele .tar.gz și tar.bz2, utilizatorii de Windows vor opta, de obicei, pentru arhivele ZIP. Așadar, dacă dorești să trimiți fișiere comprimate către un utilizator Windows, formatul ZIP reprezintă soluția cea mai compatibilă și facilă pentru ambele părți.

Utilitarele zip, unzip și Altele Conexe

Sistemele de operare Linux și Unix, cum ar fi macOS, pun la dispoziție instrumente de linie de comandă, zip și unzip, care permit crearea și extragerea fișierelor din arhive ZIP. Alături de acestea, există și alte utilitare auxiliare, cum ar fi zipcloak, zipdetails, zipsplit și zipinfo.

Am examinat mai multe distribuții Linux pentru a verifica dacă aceste utilitare sunt incluse în instalarea standard. În distribuții precum Ubuntu 19.04, 18.10, 18.04 și Manjaro 18.04, toate utilitarele menționate erau prezente. În schimb, Fedora 29 și CentOS includeau doar zip și unzip.

Pentru a instala utilitarele lipsă în Fedora 29, se folosește următoarea comandă:

sudo dnf install perl-IO-Compress

Pentru a instala utilitarele lipsă în CentOS 7, se utilizează comanda:

sudo yum install perl-IO-Compress

În cazul în care utilitarele zip lipsesc în alte distribuții Linux, se poate folosi instrumentul de gestionare a pachetelor specific distribuției respective pentru a instala pachetul corespunzător.

Crearea Arhivelor ZIP cu Comanda zip

Pentru a crea o arhivă ZIP, comanda zip trebuie urmată de numele dorit pentru arhivă și de lista fișierelor ce urmează a fi incluse. Deși extensia „.zip” este opțională, nu este greșit dacă o adaugi.

De exemplu, pentru a crea o arhivă numită `source_code.zip` ce conține toate fișierele sursă C și fișierele header din directorul curent, se va folosi:

zip source_code *.c *.h

Pe parcursul adăugării, fiecare fișier este listat, împreună cu nivelul de compresie obținut.

Verificând arhiva creată, se poate observa că extensia „.zip” a fost adăugată automat.

ls -l source_code.zip

Pentru a evita afișarea detaliilor procesului de creare a arhivei, se poate folosi opțiunea `-q` (quiet):

zip -q source_code *.c *.h

Includerea Directoarelor în Arhivele ZIP

Pentru a include subdirectoare, se folosește opțiunea `-r` (recursivă), adăugând numele subdirectoarelor în linia de comandă. Astfel, pentru a include directorul „archive” în arhiva creată anterior:

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

Din considerație pentru destinatarul arhivei, este recomandat ca fișierele să fie grupate într-un director. Când arhiva este extrasă, fișierele vor fi plasate automat într-un director, evitându-se astfel dezordinea.

Următoarea comandă va arhiva directorul „work” și toate subdirectoarele acestuia, presupunând că este executată din directorul părinte:

zip -r -q source_code work/

Ajustarea Nivelului de Compresie

Nivelul de compresie poate fi controlat, variind de la 0 (fără compresie) la 9 (compresie maximă). Compresia mai mare implică un timp mai lung de creare a arhivei, dar pentru arhivele mici, diferența este neglijabilă. Compresia implicită (nivelul 6) este adesea suficientă.

Pentru a specifica un nivel de compresie, se adaugă numărul corespunzător, precedat de un „-„. De exemplu, pentru a folosi nivelul 0:

zip -0 -r -q source_code work/

Nivelul implicit de compresie este 6. Specificarea opțiunii `-6` este opțională.

zip -r -q source_code work/

Pentru compresie maximă, se folosește nivelul 9:

zip -9 -r -q source_code work/

În exemplul prezentat, diferența de dimensiune între compresia 0 și 6 a fost de 400K, iar între compresia 6 și 9 de doar 4K. Chiar și diferențele mici de compresie, pot deveni semnificative pentru arhive foarte mari, cu sute sau mii de fișiere.

Adăugarea Parolă la Arhivele ZIP

Parolarea arhivelor ZIP este simplă. Se folosește opțiunea `-e` (encrypt), iar sistemul va solicita introducerea și confirmarea parolei.

zip -e -r -q source_code work/

Extragerea Fișierelor din Arhivele ZIP cu unzip

Pentru a extrage fișierele dintr-o arhivă ZIP, se folosește comanda unzip, urmată de numele arhivei (inclusiv extensia „.zip”):

unzip source_code.zip

Pe parcursul extragerii, fișierele sunt listate.

Fișierele ZIP nu conțin informații despre proprietarul fișierelor. Astfel, toate fișierele extrase vor avea ca proprietar utilizatorul curent.

Similar cu `zip`, `unzip` are opțiunea `-q` (quiet) pentru a evita afișarea listei fișierelor extrase:

unzip -q source_code.zip

Extragerea Fișierelor într-un Director Anume

Pentru a extrage fișierele într-un director specific, se folosește opțiunea `-d` (director), urmată de calea către directorul țintă:

unzip -q source_code.zip -d ./development

Extragerea Arhivelor ZIP Parolate

Dacă o arhivă ZIP a fost parolată, `unzip` va solicita introducerea acesteia. Fără parola corectă, extragerea nu va fi posibilă.

unzip -q source_code.zip

Pentru a introduce parola direct în linia de comandă (cu riscul vizibilității în istoricul comenzilor), se folosește opțiunea `-P`, urmată de parolă:

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

Excluderea Fișierelor din Extragere

Pentru a exclude anumite fișiere sau grupuri de fișiere de la extragere, se folosește opțiunea `-x` (exclude). De exemplu, pentru a exclude fișierele cu extensia „.h”:

unzip -q source_code.zip -x *.h

Suprascrierea Fișierelor

În cazul în care unele fișiere au fost extrase anterior și șterse din greșeală, la reextragere `unzip` va solicita confirmarea suprascrierii. Opțiunile disponibile sunt:

y Da, suprascrie fișierul curent
n Nu, nu suprascrie fișierul curent
R Suprascrie toate fișierele
N Nu suprascrie niciun fișier
r Redenumire, solicită un nou nume

Pentru a forța suprascrierea fișierelor existente, se folosește opțiunea `-o` (overwrite):

unzip -o -q source_code.zip

Pentru a extrage doar fișierele care nu există deja în directorul țintă, se folosește opțiunea `-n` (never overwrite):

unzip -n source_code.zip

Vizualizarea Conținutului unei Arhive ZIP

Pentru a vizualiza lista fișierelor dintr-o arhivă ZIP înainte de extragere, se folosește opțiunea `-l` (list archive). Ieșirea este redirecționată către `less` pentru o vizualizare mai facilă:

unzip -l source_code.zip | less

Ieșirea afișează directoarele și fișierele din arhivă, dimensiunea și data adăugării. Se apasă tasta „q” pentru a ieși din `less`.

Există și alte utilitare care oferă informații diverse despre conținutul arhivelor ZIP.

Adăugarea Parolă cu zipcloak

Dacă s-a uitat adăugarea parolei la crearea arhivei, se poate folosi comanda `zipcloak`, urmată de numele arhivei. Sistemul va solicita parola și confirmarea acesteia:

zipcloak source_code.zip

Vizualizarea Detaliilor cu zipdetails

Comanda `zipdetails` oferă informații detaliate despre arhivele ZIP. Datorită volumului mare de informații, ieșirea este redirecționată către `less`:

zipdetails source_code.zip | less

Informațiile includ numele fișierelor, chiar dacă arhiva este parolată. Aceste informații sunt stocate ca metadate, nefiind criptate.

Căutarea în Arhivele ZIP cu zipgrep

Comanda `zipgrep` permite căutarea textului în fișierele unei arhive ZIP. De exemplu, pentru a căuta fișierele care conțin textul „keyval.h”:

zipgrep keyval.h source_code.zip

Rezultatul indică fișierele și directoarele unde a fost găsit textul căutat.

Informații Suplimentare cu zipinfo

Comanda `zipinfo` oferă încă o modalitate de vizualizare a informațiilor din arhivele ZIP, ieșirea fiind direcționată către `less`:

zipinfo source_code.zip | less

Informațiile afișate includ permisiunile fișierului, versiunea instrumentului folosit la creare, dimensiunea originală, un descriptor de fișier, metoda de compresie, data și ora, numele fișierului și directorul.

Descriptorul fișierului este format din două caractere: primul indică tipul (text sau binar), iar o majusculă indică faptul că fișierul este criptat. Al doilea caracter indică tipul de metadate (niciuna, antet extins, câmp suplimentar, sau ambele).

Simboluri folosite pentru descriptor:

  • -: Niciuna
  • l: Antet local extins
  • x: Câmp suplimentar
  • X: Antet local extins și câmp suplimentar

Divizarea Arhivelor ZIP cu zipsplit

Comanda `zipsplit` permite divizarea unei arhive ZIP mari în mai multe arhive mai mici, util pentru transferul fișierelor cu restricții de dimensiune. Opțiunea `-n` (size) permite specificarea dimensiunii maxime a fișierelor rezultate. De exemplu, pentru a diviza arhiva în fișiere de maximum 100KB:

zipsplit -n 102400 source_code.zip

Dimensiunea specificată nu poate fi mai mică decât dimensiunea oricărui fișier din arhiva originală.

Prin utilizarea acestor comenzi, gestionarea arhivelor ZIP poate fi realizată direct din terminalul Linux, oferind o metodă eficientă și rapidă pentru manipularea fișierelor comprimate.