Hvordan zippe eller pakke ut filer fra Linux-terminalen

ZIP-filer er et universelt arkiv som ofte brukes på Windows, macOS og til og med Linux-systemer. Du kan lage et zip-arkiv eller pakke ut filer fra en med noen vanlige Linux-terminalkommandoer.

ZIP-komprimert arkivfilformat

Takket være dominansen til ZIP-formatet i Windows-riket, er ZIP-filer sannsynligvis den vanligste formen for komprimert arkiv i verden.

Mens .tar.gz- og tar.bz2-filer er vanlige på Linux, vil Windows-brukere sannsynligvis sende deg et arkiv i ZIP-format. Og hvis du vil arkivere noen filer og sende dem til en Windows-bruker, vil ZIP-formatet være den enkleste og mest kompatible løsningen for alle.

zip, unzip og andre verktøy

Du vet kanskje allerede at Linux og Unix-lignende operativsystemer som macOS har verktøy som lar deg lage ZIP-filer og trekke ut filer fra dem, kalt zip og unzip. Men det er en hel familie av relaterte verktøy som zipcloak, zipdetails, zipsplit og zipinfo.

Vi sjekket noen Linux-distribusjoner for å se om de inkluderte disse verktøyene i standardinstallasjonen. Alle verktøyene var til stede i Ubuntu 19.04, 18.10 og 18.04. De var også tilstede i Manjaro 18.04. Fedora 29 inkluderte zip og unzip, men ingen av de andre verktøyene, og det var også tilfellet for CentOS.

For å installere de manglende elementene på Fedora 29, bruk følgende kommando:

sudo dnf install perl-IO-Compress

For å installere de manglende elementene på CentOS 7, bruk følgende kommando:

sudo yum install perl-IO-Compress

Hvis noen av zip-verktøyene mangler fra en Linux-distribusjon som ikke ble nevnt ovenfor, bruk Linux-distribusjonens pakkeadministrasjonsverktøy for å installere den nødvendige pakken.

Hvordan lage en ZIP-fil med zip-kommandoen

For å lage en ZIP-fil, må du fortelle zip navnet på arkivfilen og hvilke filer som skal inkluderes i den. Du trenger ikke legge til «.zip»-utvidelsen til arkivnavnet, men det skader ikke hvis du gjør det.

For å lage en fil kalt source_code.zip som inneholder alle C-kildekodefilene og overskriftsfilene i gjeldende katalog, bruker du denne kommandoen:

zip source_code *.c *.h

Hver fil er oppført etter hvert som den legges til. Navnet på filen og mengden komprimering som ble oppnådd på den filen vises.

Hvis du ser på det nye ZIP-arkivet, kan du se at filtypen «.zip» er lagt til automatisk med zip.

ls -l source_code.zip

Hvis du ikke vil se utdata fra zip når ZIP-filen opprettes, bruk alternativet -q (stille).

zip -q source_code *.c *.h

Inkludert kataloger i ZIP-filer

For å inkludere underkataloger i ZIP-filen, bruk alternativet -r (rekursivt) og ta med navnet på underkatalogen på kommandolinjen. For å lage en ZIP-fil som før og også inkludere arkivunderkatalogen, bruk denne kommandoen.

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

For å ta hensyn til personen som skal trekke ut filene fra ZIP-filen du oppretter, er det ofte høflig å lage ZIP-filer med filene inne i en katalog. Når personen som mottar ZIP-filen trekker den ut, plasseres alle filene pent i en katalog på datamaskinen.

  Hvordan spille Trine Enchanted Edition på Linux

I den følgende kommandoen skal vi arkivere arbeidskatalogen og alle underkataloger. Merk at denne kommandoen utstedes fra den overordnede katalogen til arbeidsmappen.

zip -r -q source_code work/

Stille inn nivået for kompresjon

Du kan angi hvor mye komprimering som skal brukes på filene når de legges til ZIP-arkivet. Området er fra 0 til 9, hvor 0 er ingen komprimering i det hele tatt. Jo høyere komprimering, jo lengre tid tar det å lage ZIP-filen. For ZIP-filer av beskjeden størrelse er ikke tidsforskjellen en betydelig straff. Men så, for ZIP-filer av beskjeden størrelse, er nok standardkomprimeringen (nivå 6) uansett god nok.

For å få zip til å bruke et spesifikt komprimeringsnivå, send nummeret som et alternativ på kommandolinjen, med en «-«, slik:

zip -0 -r -q source_code work/

Standard komprimeringsnivå er 6. Det er ikke nødvendig å gi alternativet -6, men det vil ikke skade hvis du gjør det.

zip -r -q source_code work/

Maksimalt komprimeringsnivå er nivå 9.

zip -9 -r -q source_code work/

Med utvalget av filer og kataloger som arkiveres her, er forskjellen mellom ingen komprimering (nivå 0) og standardkomprimering (nivå 6) 400K. Forskjellen mellom standardkomprimering og høyeste komprimeringsnivå (nivå 9) er bare 4K.

Det virker kanskje ikke så mye, men for arkiver som inneholder hundrevis eller til og med tusenvis av filer, vil den lille mengden ekstra komprimering per fil legge opp til en verdifull plassbesparelse.

Legge til passord i ZIP-filer

Det er enkelt å legge til passord i ZIP-filer. Bruk alternativet -e (krypter) og du vil bli bedt om å skrive inn passordet ditt og angi det på nytt for bekreftelse.

zip -e -r -q source_code work/

Hvordan pakke ut en ZIP-fil med unzip-kommandoen

For å pakke ut filene fra en ZIP-fil, bruk unzip-kommandoen og oppgi navnet på ZIP-filen. Vær oppmerksom på at du må oppgi «.zip»-utvidelsen.

unzip source_code.zip

Etter hvert som filene pakkes ut, vises de i terminalvinduet.

ZIP-filer inneholder ikke detaljer om fileierskap. Alle filene som pakkes ut har eieren satt til brukeren som pakker dem ut.

  The Fall of Max Payne på Linux

Akkurat som zip har unzip et -q (stille) alternativ, slik at du ikke trenger å se filoppføringen når filene pakkes ut.

unzip -q source_code.zip

Pakk ut filer til en målkatalog

For å få filene pakket ut i en bestemt katalog, bruk -d (katalog)-alternativet, og oppgi banen til katalogen du ønsker at arkivet skal pakkes ut til.

unzip -q source_code.zip -d ./development

Pakk ut passordbeskyttede ZIP-filer

Hvis en ZIP-fil er opprettet med et passord, vil unzip be deg om passordet. Hvis du ikke oppgir riktig passord, vil unzip ikke pakke ut filene.

unzip -q source_code.zip

Hvis du ikke bryr deg om at passordet ditt blir sett av andre – og heller ikke om at det lagres i kommandohistorikken din – kan du oppgi passordet på kommandolinjen med alternativet -P (passord). (Du må bruke stor «P.»)

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

Ekskluderer filer

Hvis du ikke vil pakke ut en bestemt fil eller gruppe med filer, bruk alternativet -x (ekskluder). I dette eksemplet ønsker vi å pakke ut alle filene bortsett fra de som slutter med en «.h»-utvidelse.

unzip -q source_code.zip -x *.h

Overskrive filer

Anta at du har pakket ut et arkiv, men du har slettet noen av de utpakkede filene ved en feiltakelse.

En rask løsning for det ville være å pakke ut filene igjen. Men hvis du prøver å pakke ut ZIP-filen i samme katalog som før, vil unzip be deg om en beslutning om å overskrive filene. Den vil forvente ett av følgende svar.

Bortsett fra r-svaret (gi nytt navn), skiller disse svarene mellom store og små bokstaver.

y: Ja, overskriv denne filen
n: Nei, ikke overskriv denne filen
A: Alle, overskriv alle filene
N: Ingen, overskriv ingen av filene
r: Gi nytt navn, pakk ut denne filen, men gi den et nytt navn. Du vil bli bedt om et nytt navn.

For å tvinge pakke ut for å overskrive eksisterende filer, bruk -o (overskriv).

unzip -o -q source_code.zip

Den mest effektive måten å erstatte de manglende filene på ville være å pakke ut filer i arkivet som ikke er i målkatalogen. For å gjøre dette, bruk alternativet -n (aldri overskriv).

unzip -n source_code.zip

Ser inn i en ZIP-fil

Det er ofte nyttig og lærerikt å se en liste over filene i en ZIP-fil før du pakker den ut. Du kan gjøre dette med alternativet -l (listearkiv). Det føres gjennom mindre for å gjøre utgangen håndterbar.

unzip -l source_code.zip | less

Utdataene viser katalogene og filene i ZIP-filen, deres lengde og klokkeslett og dato de ble lagt til i arkivet. Trykk «q» for å avslutte fra mindre.

Det er andre måter å kikke inn i en ZIP-fil som gir forskjellige typer informasjon, som vi skal se.

  Hvordan deaktivere UFW-brannmuren i Linux

Legg til et passord med zipcloak-kommandoen

Hvis du har opprettet en ZIP-fil, men har glemt å legge til et passord, hva kan du gjøre? Du kan raskt legge til et passord i ZIP-filen ved å bruke zipcloak-kommandoen. Send navnet på ZIP-filen på kommandolinjen. Du vil bli bedt om et passord. Du må bekrefte passordet ved å skrive det inn en gang til.

zipcloak source_code.zip

Vis fildetaljer med kommandoen zipdetails

Kommandoen zipdetails vil vise deg mye informasjon om ZIP-filen. Den eneste fornuftige måten å håndtere mengden output denne kommandoen kan gi, er å røre den gjennom mindre.

zipdetails source_code.zip | less

Merk at informasjonen vil inkludere filnavn selv om ZIP-filen er passordbeskyttet. Denne typen informasjon lagres i ZIP-filen som metadata og er ikke en del av de krypterte dataene.

Søk inne i filen med zipgrep-kommandoen

Zipgrep-kommandoen lar deg søke i filene i en ZIP-fil. I det følgende eksempelet ønsker vi å vite hvilke filer i ZIP-filen som har teksten «keyval.h» i seg.

zipgrep keyval.h source_code.zip

Vi kan se at filene slang.c og getval.c inneholder strengen «keyval.h». Vi kan også se at det er to kopier av hver av disse filene i forskjellige kataloger i ZIP-filen.

Vis informasjon med zipinfo-kommandoen

Zipinfo-kommandoen gir deg enda en måte å se inn i en ZIP-fil. Som før rører vi utgangen gjennom mindre.

zipinfo source_code.zip | less

Fra venstre til høyre viser utgangen:

Filtillatelsene
Versjonen av verktøyet som ble brukt til å lage ZIP-filen
Den opprinnelige filstørrelsen
En filbeskrivelse (beskrevet nedenfor)
Metoden for kompresjon (deflasjon, i dette tilfellet)
Data og tidsstempel
Navnet på filen og eventuell katalog

Filbeskrivelsen består av to tegn. Det første tegnet vil være en «t» eller en «b» for å indikere en tekst eller binær fil. Hvis det er en stor bokstav, er filen kryptert. Det andre tegnet kan være ett av fire tegn. Dette tegnet representerer hvilken type metadata som er inkludert for denne filen: ingen, en utvidet lokal overskrift, et «ekstra felt», eller begge deler.

-: Hvis ingen av dem eksisterer, vil tegnet være en bindestrek
l: hvis det er en utvidet lokal overskrift, men ikke noe ekstra felt
x: hvis det ikke er noen utvidet lokal overskrift, men det er et ekstra felt
X: hvis det er en utvidet lokal overskrift og det er et ekstra felt

Del filen med zipsplit-kommandoen

Hvis du trenger å sende ZIP-filen til noen andre, men det er størrelsesbegrensninger eller problemer med overføringen av filen, kan du bruke zipsplit-kommandoen til å dele den originale ZIP-filen i et sett med mindre ZIP-filer.

Alternativet -n (størrelse) lar deg angi en maksimal størrelse for hver av de nye ZIP-filene. I dette eksemplet deler vi filen source_code.zip. Vi vil ikke at noen av de nye ZIP-filene skal være større enn 100 KB (102400 byte).

zipsplit -n 102400 source_code.zip

Størrelsen du velger kan ikke være mindre enn størrelsen på noen av filene i ZIP-filen.

Ved å bruke disse kommandoene kan du lage dine egne ZIP-filer, pakke ut ZIP-filer du mottar, og utføre forskjellige andre operasjoner på dem uten å forlate Linux-terminalen.