Како зиповати или распаковати датотеке са Линук терминала

ZIP datoteke su univerzalni format arhiva koji se često koristi na Windows, macOS, pa čak i Linux sistemima. Moguće je kreirati ZIP arhivu ili raspakovati fajlove iz nje pomoću uobičajenih komandi Linux terminala.

ZIP kompresovani format arhivskih datoteka

Zahvaljujući rasprostranjenosti ZIP formata u Windows okruženju, ZIP fajlovi su verovatno najkorišćeniji oblik kompresovanih arhiva na globalnom nivou.

Iako su .tar.gz i .tar.bz2 datoteke uobičajene na Linuxu, korisnici Windowsa će vam najverovatnije poslati arhivu u ZIP formatu. Takođe, ukoliko želite da arhivirate određene datoteke i pošaljete ih korisniku Windowsa, ZIP format će biti najjednostavnije i najkompatibilnije rešenje za sve.

zip, unzip i drugi alati

Verovatno ste već upoznati sa činjenicom da operativni sistemi slični Linuxu i Unixu, kao što je macOS, poseduju alate koji omogućavaju kreiranje ZIP datoteka i izdvajanje fajlova iz njih, poznate kao zip i unzip. Pored njih, postoji i porodica srodnih alatki kao što su zipcloak, zipdetails, zipsplit i zipinfo.

Proverili smo nekoliko Linux distribucija da bismo utvrdili da li su ove alatke uključene u standardnu instalaciju. Sve su bile prisutne u Ubuntu 19.04, 18.10 i 18.04, kao i na Manjaru 18.04. Fedora 29 je uključivala zip i unzip, ali ne i ostale, što je bio slučaj i sa CentOS.

Da biste instalirali nedostajuće komponente na Fedori 29, koristite sledeću komandu:

sudo dnf install perl-IO-Compress

Za instalaciju nedostajućih elemenata na CentOS 7, koristite ovu komandu:

sudo yum install perl-IO-Compress

Ukoliko neki od ZIP alata nedostaje na vašoj Linux distribuciji koja nije pomenuta, koristite alat za upravljanje paketima te distribucije da biste instalirali potreban paket.

Kako kreirati ZIP datoteku pomoću zip komande

Za kreiranje ZIP datoteke, potrebno je da navedete ime arhivske datoteke i fajlove koje želite da uključite u nju. Ekstenziju „.zip“ ne morate da dodajete imenu arhive, ali neće škoditi ako to učinite.

Za kreiranje datoteke pod nazivom source_code.zip koja sadrži sve C source code i header fajlove iz trenutnog direktorijuma, koristite ovu komandu:

zip source_code *.c *.h

Svaki fajl je naveden prilikom dodavanja, uz prikaz imena i stepena kompresije postignutog za taj fajl.

Ako pogledate novu ZIP arhivu, videćete da je ekstenzija „.zip“ automatski dodata.

ls -l source_code.zip

Ukoliko ne želite da vidite izlaz iz zip komande tokom kreiranja ZIP datoteke, koristite opciju -q (tiho).

zip -q source_code *.c *.h

Uključivanje direktorijuma u ZIP datoteke

Za uključivanje poddirektorijuma u ZIP datoteku, koristite opciju -r (rekurzivno) i uključite ime poddirektorijuma u komandnoj liniji. Za kreiranje ZIP datoteke kao ranije, uz uključivanje poddirektorijuma archive, koristite ovu komandu:

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

Preporučljivo je kreirati ZIP datoteke tako da se fajlovi unutar njih nalaze u zasebnom direktorijumu, kako bi osoba koja ih raspakuje imala sve datoteke uredno smeštene u jedan direktorijum na svom računaru.

U sledećoj komandi, arhiviraćemo radni direktorijum i sve poddirektorijume. Imajte na umu da se ova komanda izvršava iz nadređenog direktorijuma radne fascikle.

zip -r -q source_code work/

Podešavanje nivoa kompresije

Možete podesiti nivo kompresije koji se primenjuje na fajlove prilikom dodavanja u ZIP arhivu. Opseg je od 0 do 9, pri čemu 0 označava da nema kompresije. Što je veća kompresija, duže traje kreiranje ZIP datoteke. Za ZIP datoteke skromne veličine, razlika u vremenu nije značajna, ali kod ZIP datoteka veće veličine može biti primetna. Podrazumevana kompresija (nivo 6) je često sasvim dovoljna.

Da biste odredili nivo kompresije, prosledite broj kao opciju u komandnoj liniji, koristeći „-“ ispred broja, kao što je prikazano u nastavku:

zip -0 -r -q source_code work/

Podrazumevani nivo kompresije je 6. Nema potrebe da navodite opciju -6, ali neće škoditi ako to uradite.

zip -r -q source_code work/

Maksimalni nivo kompresije je 9.

zip -9 -r -q source_code work/

U datom primeru, razlika između bez kompresije (nivo 0) i podrazumevane kompresije (nivo 6) je 400KB. Razlika između podrazumevane kompresije i najvišeg nivoa kompresije (nivo 9) je samo 4KB.

Iako to ne izgleda mnogo, za arhive koje sadrže stotine ili čak hiljade datoteka, mala količina dodatne kompresije po datoteci može rezultirati značajnom uštedom prostora.

Dodavanje lozinki u ZIP datoteke

Dodavanje lozinki ZIP datotekama je jednostavno. Koristite opciju -e (enkripcija) i od vas će biti zatraženo da unesete lozinku i ponovo je potvrdite.

zip -e -r -q source_code work/

Kako raspakovati ZIP datoteku pomoću unzip komande

Za izdvajanje datoteka iz ZIP datoteke, koristite komandu unzip i navedite ime ZIP datoteke, uključujući ekstenziju „.zip“.

unzip source_code.zip

Fajlovi se navode u terminalu prilikom raspakivanja.

ZIP datoteke ne sadrže detalje o vlasništvu datoteka. Sve datoteke koje se izdvajaju imaju vlasnika postavljenog na korisnika koji ih izdvaja.

Kao i zip, i unzip ima opciju -q (tiho), tako da ne morate videti spisak datoteka tokom raspakivanja.

unzip -q source_code.zip

Izdvajanje datoteka u ciljni direktorijum

Za raspakivanje datoteka u određeni direktorijum, koristite opciju -d (direktorijum) i navedite putanju do direktorijuma u koji želite da se arhiva raspakuje.

unzip -q source_code.zip -d ./development

Izdvajanje ZIP datoteka zaštićenih lozinkom

Ako je ZIP datoteka kreirana sa lozinkom, unzip će od vas tražiti da je unesete. Ukoliko ne unesete tačnu lozinku, raspakivanje neće biti uspešno.

unzip -q source_code.zip

Ako vam nije bitno da drugi vide vašu lozinku, ili da ona bude sačuvana u istoriji komandi, možete je uneti u komandnoj liniji koristeći opciju -P (lozinka), uz obavezno veliko „P“.

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

Isključivanje datoteka

Ako ne želite da izdvojite određenu datoteku ili grupu datoteka, koristite opciju -x (isključi). U ovom primeru, želimo da izdvojimo sve fajlove osim onih koji imaju ekstenziju „.h“.

unzip -q source_code.zip -x *.h

Prepisivanje datoteka

Pretpostavimo da ste raspakovali arhivu, ali ste slučajno izbrisali nekoliko ekstrahovanih fajlova.

Najbrže rešenje je da ponovo izdvojite datoteke. Ako pokušate da izvučete ZIP datoteku u isti direktorijum kao i pre, unzip će od vas tražiti odluku o prepisivanju datoteka. Očekuje se jedan od sledećih odgovora.

Osim odgovora r (preimenuj), ovi odgovori su osetljivi na velika i mala slova.

i: Da, prepiši ovu datoteku
n: Ne, nemoj prepisivati ovu datoteku
O: Sve, prepiši sve datoteke
N: Ništa, ne prepiši nijednu datoteku
r: Preimenuj, raspakuj ovu datoteku, ali joj daj novo ime. Od vas će biti zatraženo novo ime.

Da biste prisilili raspakivanje da prepiše sve postojeće datoteke, koristite opciju -o (prepiši).

unzip -o -q source_code.zip

Najeefikasniji način za zamenu nedostajućih datoteka bio bi da se raspakuju samo one datoteke koje nisu u ciljnom direktorijumu. Da biste to uradili, koristite opciju -n (nikada ne prepiši).

unzip -n source_code.zip

Uvid u sadržaj ZIP datoteke

Često je korisno pogledati listu fajlova unutar ZIP datoteke pre izdvajanja. To možete uraditi pomoću opcije -l (lista arhive). Izlaz se usmerava kroz komandu less radi lakšeg pregleda.

unzip -l source_code.zip | less

Izlaz prikazuje direktorijume i datoteke u ZIP datoteci, njihovu dužinu, kao i vreme i datum kada su dodate u arhivu. Pritisnite „q“ za izlaz iz less.

Postoje i drugi načini za uvid u sadržaj ZIP datoteke koji daju različite informacije, kao što ćemo videti u nastavku.

Dodavanje lozinke pomoću zipcloak komande

Ukoliko ste kreirali ZIP datoteku, a zaboravili ste da dodate lozinku, možete je brzo dodati pomoću komande zipcloak. Dovoljno je da navedete ime ZIP datoteke. Biće vam zatraženo da unesete lozinku i da je potvrdite unosom drugi put.

zipcloak source_code.zip

Pregled detalja fajla pomoću zipdetails komande

Komanda zipdetails će prikazati mnoge informacije vezane za ZIP datoteku. Jedini razuman način za pregled ogromne količine izlaza je da se prosledi kroz komandu less.

zipdetails source_code.zip | less

Važno je napomenuti da informacije uključuju imena datoteka čak i ako je ZIP datoteka zaštićena lozinkom. Ova vrsta informacija se čuva kao metapodaci i ne spada u šifrovane podatke.

Pretraga sadržaja datoteke pomoću zipgrep komande

Komanda zipgrep vam omogućava da pretražujete sadržaj unutar datoteka u ZIP arhivi. U sledećem primeru, želimo da saznamo koje datoteke unutar ZIP datoteke sadrže tekst „keyval.h“.

zipgrep keyval.h source_code.zip

Možemo videti da datoteke slang.c i getval.c sadrže string „keyval.h“. Takođe, možemo videti da postoje dve kopije svake od ovih datoteka u različitim direktorijumima unutar ZIP datoteke.

Pregled informacija pomoću zipinfo komande

Komanda zipinfo pruža još jedan način za uvid u sadržaj ZIP datoteke. Kao i ranije, izlaz se prosleđuje kroz komandu less.

zipinfo source_code.zip | less

S leva na desno, izlaz prikazuje:

Dozvole za fajl
Verzija alata korišćenog za kreiranje ZIP datoteke
Originalna veličina datoteke
Deskriptor datoteke (opisano u nastavku)
Metoda kompresije (deflacija, u ovom slučaju)
Podaci i vremenska oznaka
Ime datoteke i bilo koji direktorijum

Deskriptor datoteke se sastoji od dva znaka. Prvi znak će biti „t“ ili „b“ za označavanje tekstualne ili binarne datoteke. Ako je veliko slovo, datoteka je šifrovana. Drugi znak može biti jedan od četiri znaka i predstavlja tip metapodataka koji su uključeni u datoteku: nijedan, prošireno lokalno zaglavlje, „dodatno polje“ ili oba.

-: Ako ne postoji nijedan, znak će biti crtica
l: Ako postoji prošireno lokalno zaglavlje, ali nema dodatnog polja
k: Ako ne postoji prošireno lokalno zaglavlje, ali postoji dodatno polje
X: Ako postoji prošireno lokalno zaglavlje i dodatno polje

Deljenje datoteke pomoću zipsplit komande

Ako želite da pošaljete ZIP datoteku nekome, a postoje ograničenja u veličini ili problemi sa prenosom datoteke, možete koristiti zipsplit komandu da biste originalnu ZIP datoteku podelili na više manjih ZIP datoteka.

Opcija -n (veličina) vam omogućava da podesite maksimalnu veličinu za svaku od novih ZIP datoteka. U ovom primeru, delimo datoteku source_code.zip i ne želimo da bilo koja od novih ZIP datoteka bude veća od 100KB (102400 bajtova).

zipsplit -n 102400 source_code.zip

Veličina koju odaberete ne može biti manja od veličine bilo koje datoteke u ZIP datoteci.

Koristeći ove komande, možete kreirati sopstvene ZIP datoteke, raspakovati one koje primite, i obavljati razne druge operacije na njima bez napuštanja Linux terminala.