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

Fișierele ZIP sunt o arhivă universală folosită în mod obișnuit pe sistemele Windows, macOS și chiar Linux. Puteți crea o arhivă zip sau dezarhivați fișiere dintr-una cu unele comenzi comune ale terminalului Linux.

Formatul fișierului de arhivă comprimat ZIP

Datorită dominației formatului ZIP în domeniul Windows, fișierele ZIP sunt probabil cea mai comună formă de arhivă comprimată din lume.

În timp ce fișierele .tar.gz și tar.bz2 sunt comune pe Linux, utilizatorii de Windows vă vor trimite probabil o arhivă în format ZIP. Și, dacă doriți să arhivați unele fișiere și să le trimiteți unui utilizator Windows, formatul ZIP va fi cea mai ușoară și mai compatibilă soluție pentru toată lumea.

zip, dezarhivați și alte utilitare

Poate știți deja că sistemele de operare Linux și Unix, cum ar fi macOS, au instrumente care vă permit să creați fișiere ZIP și să extrageți fișiere din ele, numite zip și unzip. Dar există o întreagă familie de utilități similare, cum ar fi zipcloak, zipdetails, zipsplit și zipinfo.

Am verificat unele distribuții Linux pentru a vedea dacă includ aceste utilitare în instalarea standard. Toate utilitățile au fost prezente în Ubuntu 19.04, 18.10 și 18.04. Au fost prezenți și în Manjaro 18.04. Fedora 29 a inclus zip și dezarhivare, dar niciunul dintre celelalte utilități și acesta a fost și cazul CentOS.

Pentru a instala elementele lipsă pe Fedora 29, utilizați următoarea comandă:

sudo dnf install perl-IO-Compress

Pentru a instala elementele lipsă pe CentOS 7, utilizați următoarea comandă:

sudo yum install perl-IO-Compress

Dacă vreunul dintre utilitarele zip lipsește dintr-o distribuție Linux care nu a fost menționată mai sus, utilizați instrumentul de gestionare a pachetelor din distribuția Linux respectivă pentru a instala pachetul necesar.

Cum se creează un fișier ZIP cu comanda zip

Pentru a crea un fișier ZIP, trebuie să spuneți zip numele fișierului arhivă și ce fișiere să includeți în acesta. Nu trebuie să adăugați extensia „.zip” la numele arhivei, dar nu dăunează dacă o faceți.

Pentru a crea un fișier numit source_code.zip care să conțină toate fișierele codului sursă C și fișierele antet din directorul curent, ați folosi această comandă:

zip source_code *.c *.h

Fiecare fișier este listat pe măsură ce este adăugat. Se afișează numele fișierului și cantitatea de compresie realizată pe acel fișier.

Dacă te uiți la noua arhivă ZIP, poți vedea că extensia de fișier „.zip” a fost adăugată automat prin zip.

ls -l source_code.zip

Dacă nu doriți să vedeți rezultatul din zip pe măsură ce fișierul ZIP este creat, utilizați opțiunea -q (liniștită).

zip -q source_code *.c *.h

Inclusiv directoare în fișierele ZIP

Pentru a include subdirectoare în fișierul ZIP, utilizați opțiunea -r (recursivă) și includeți numele subdirectoarelor pe linia de comandă. Pentru a crea un fișier ZIP ca înainte și pentru a include, de asemenea, subdirectorul de arhivă, utilizați această comandă.

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

Pentru a fi atenți la persoana care va extrage fișierele din fișierul ZIP pe care îl creați, este adesea politicos să creați fișiere ZIP cu fișierele din interior conținute într-un director. Când persoana care primește fișierul ZIP îl extrage, toate fișierele sunt plasate ordonat într-un director de pe computerul său.

În următoarea comandă, vom arhiva directorul de lucru și toate subdirectoarele. Rețineți că această comandă este emisă din directorul părinte al folderului de lucru.

zip -r -q source_code work/

Setarea nivelului de compresie

Puteți seta cât de multă compresie se aplică fișierelor pe măsură ce acestea sunt adăugate în arhiva ZIP. Intervalul este de la 0 la 9, 0 nefiind deloc compresie. Cu cât compresia este mai mare, cu atât este nevoie de mai mult timp pentru a crea fișierul ZIP. Pentru fișierele ZIP de dimensiuni modeste, diferența de timp nu este o penalizare semnificativă. Dar apoi, pentru fișierele ZIP de dimensiuni modeste, compresia implicită (nivelul 6) este probabil suficient de bună oricum.

Pentru ca zip să folosească un anumit nivel de compresie, transmiteți numărul ca opțiune pe linia de comandă, cu un „-“, astfel:

zip -0 -r -q source_code work/

Nivelul implicit de compresie este 6. Nu este nevoie să oferiți opțiunea -6, dar nu va face rău dacă o faceți.

zip -r -q source_code work/

Nivelul maxim de compresie este nivelul 9.

zip -9 -r -q source_code work/

Cu selecția de fișiere și directoare arhivate aici, diferența dintre fără compresie (nivel 0) și compresie implicită (nivel 6) este de 400K. Diferența dintre compresia implicită și cel mai înalt nivel de compresie (nivel 9) este de doar 4K.

S-ar putea să nu pară prea mult, dar pentru arhivele care conțin sute sau chiar mii de fișiere, cantitatea mică de compresie suplimentară per fișier s-ar adăuga la o economie de spațiu utilă.

Adăugarea parolelor la fișierele ZIP

Adăugarea parolelor la fișierele ZIP este ușoară. Utilizați opțiunea -e (criptare) și vi se va solicita să introduceți parola și să o reintroduceți pentru verificare.

zip -e -r -q source_code work/

Cum să dezarhivați un fișier ZIP cu comanda dezarhivare

Pentru a extrage fișierele dintr-un fișier ZIP, utilizați comanda dezarhivare și furnizați numele fișierului ZIP. Rețineți că trebuie să furnizați extensia „.zip”.

unzip source_code.zip

Pe măsură ce fișierele sunt extrase, acestea sunt listate în fereastra terminalului.

Fișierele ZIP nu conțin detalii despre proprietatea fișierului. Toate fișierele care sunt extrase au proprietarul setat la utilizatorul care le extrage.

La fel ca zip, dezarhivarea are o opțiune -q (liniștită), astfel încât să nu fie nevoie să vedeți lista fișierelor pe măsură ce fișierele sunt extrase.

unzip -q source_code.zip

Extragerea fișierelor într-un director țintă

Pentru a extrage fișierele într-un anumit director, utilizați opțiunea -d (director) și furnizați calea către directorul în care doriți să fie extrasă arhiva.

unzip -q source_code.zip -d ./development

Extrageți fișierele ZIP protejate cu parolă

Dacă a fost creat un fișier ZIP cu o parolă, dezarhivați vă va cere parola. Dacă nu furnizați parola corectă, dezarhivarea nu va extrage fișierele.

unzip -q source_code.zip

Dacă nu vă pasă că parola dvs. este văzută de alții – și nici dacă este stocată în istoricul comenzilor dvs. – puteți furniza parola pe linia de comandă cu opțiunea -P (parolă). (Trebuie să utilizați un „P.”)

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

Excluderea fișierelor

Dacă nu doriți să extrageți un anumit fișier sau grup de fișiere, utilizați opțiunea -x (exclude). În acest exemplu, dorim să extragem toate fișierele, cu excepția celor care se termină cu extensia „.h”.

unzip -q source_code.zip -x *.h

Suprascrierea fișierelor

Să presupunem că ați extras o arhivă, dar ați șters câteva dintre fișierele extrase din greșeală.

O soluție rapidă pentru asta ar fi extragerea fișierelor din nou. Dar dacă încercați să extrageți fișierul ZIP în același director ca înainte, dezarhivați vă va cere să luați o decizie cu privire la suprascrierea fișierelor. Se va aștepta la unul dintre următoarele răspunsuri.

În afară de răspunsul r (redenumire), aceste răspunsuri sunt sensibile la majuscule.

y: Da, suprascrieți acest fișier
n: Nu, nu suprascrieți acest fișier
R: Toate, suprascrieți toate fișierele
N: Nici unul, nu suprascrie niciunul dintre fișiere
r: Redenumiți, extrageți acest fișier, dar dați-i un nume nou. Vi se va solicita un nou nume.

Pentru a forța dezarhivarea pentru a suprascrie orice fișiere existente, utilizați opțiunea -o (suprascriere).

unzip -o -q source_code.zip

Cea mai eficientă modalitate de a înlocui fișierele lipsă ar fi să dezarhivați numai fișierele din arhivă care nu se află în directorul țintă. Pentru a face acest lucru, utilizați opțiunea -n (nu se suprascrie niciodată).

unzip -n source_code.zip

Privind în interiorul unui fișier ZIP

Este adesea util și instructiv să vedeți o listă a fișierelor din interiorul unui fișier ZIP înainte de a-l extrage. Puteți face acest lucru cu opțiunea -l (arhiva listei). Este canalizat prin mai puțin pentru a face ieșirea gestionabilă.

unzip -l source_code.zip | less

Ieșirea arată directoarele și fișierele din fișierul ZIP, lungimea acestora și ora și data la care au fost adăugate în arhivă. Apăsați „q” pentru a ieși din mai puțin.

Există și alte moduri de a arunca o privire în interiorul unui fișier ZIP care oferă diferite tipuri de informații, după cum vom vedea.

Adăugați o parolă cu comanda zipcloak

Dacă ați creat un fișier ZIP, dar ați uitat să adăugați o parolă, ce puteți face? Puteți adăuga rapid o parolă la fișierul ZIP folosind comanda zipcloak. Treceți numele fișierului ZIP pe linia de comandă. Vi se va solicita o parolă. Trebuie să verificați parola introducând-o a doua oară.

zipcloak source_code.zip

Vizualizați detaliile fișierului cu comanda zipdetails

Comanda zipdetails vă va arăta o mulțime de informații despre fișierul ZIP. Singura modalitate sensibilă de a gestiona cantitatea de ieșire pe care o poate oferi această comandă este să o direcționați prin mai puțin.

zipdetails source_code.zip | less

Rețineți că informațiile vor include nume de fișiere chiar dacă fișierul ZIP este protejat prin parolă. Acest tip de informații sunt stocate în fișierul ZIP ca metadate și nu fac parte din datele criptate.

Căutați în interiorul fișierului cu comanda zipgrep

Comanda zipgrep vă permite să căutați în fișierele dintr-un fișier ZIP. În exemplul următor, dorim să știm ce fișiere din fișierul ZIP au textul „keyval.h” în ele.

zipgrep keyval.h source_code.zip

Putem vedea că fișierele slang.c și getval.c conțin șirul „keyval.h”. De asemenea, putem vedea că există două copii ale fiecăruia dintre aceste fișiere în directoare diferite în fișierul ZIP.

Vizualizați informații cu comanda zipinfo

Comanda zipinfo vă oferă încă o modalitate de a căuta în interiorul unui fișier ZIP. La fel ca și înainte, ieșim prin mai puțin.

zipinfo source_code.zip | less

De la stânga la dreapta rezultatul arată:

Permisiunile fișierului
Versiunea instrumentului folosită pentru a crea fișierul ZIP
Mărimea fișierului original
Un descriptor de fișier (descris mai jos)
Metoda de compresie (deflația, în acest caz)
Datele și marca temporală
Numele fișierului și orice director

Descriptorul fișierului este format din două caractere. Primul caracter va fi un „t” sau un „b” pentru a indica un fișier text sau binar. Dacă este o literă mare, fișierul este criptat. Al doilea caracter poate fi unul dintre cele patru caractere. Acest caracter reprezintă ce tip de metadate sunt incluse pentru acest fișier: niciuna, un antet local extins, un „câmp suplimentar” sau ambele.

-: Dacă niciunul nu există, caracterul va fi o cratimă
l: dacă există un antet local extins, dar nu există un câmp suplimentar
x: dacă nu există un antet local extins, dar există un câmp suplimentar
X: dacă există un antet local extins și există un câmp suplimentar

Împărțiți fișierul cu comanda zipsplit

Dacă trebuie să trimiteți fișierul ZIP către altcineva, dar există restricții de dimensiune sau probleme cu transmiterea fișierului, puteți utiliza comanda zipsplit pentru a împărți fișierul ZIP original într-un set de fișiere ZIP mai mici.

Opțiunea -n (dimensiune) vă permite să setați o dimensiune maximă pentru fiecare dintre noile fișiere ZIP. În acest exemplu, împărțim fișierul source_code.zip. Nu dorim ca niciunul dintre noile fișiere ZIP să fie mai mare de 100 KB (102400 de octeți).

zipsplit -n 102400 source_code.zip

Dimensiunea pe care o alegeți nu poate fi mai mică decât dimensiunea oricăruia dintre fișierele din fișierul ZIP.

Folosind aceste comenzi, puteți să vă creați propriile fișiere ZIP, să dezarhivați fișierele ZIP pe care le primiți și să efectuați diverse alte operațiuni asupra lor fără a părăsi terminalul Linux.