Sådan zip eller udpakkes filer fra Linux-terminalen

ZIP-filer er et universelt arkiv, der ofte bruges på Windows, macOS og endda Linux-systemer. Du kan oprette et zip-arkiv eller pakke ud filer fra et med nogle almindelige Linux-terminalkommandoer.

ZIP-komprimeret arkivfilformat

Takket være ZIP-formatets dominans i Windows-verdenen er ZIP-filer sandsynligvis den mest almindelige form for komprimeret arkiv i verden.

Mens .tar.gz- og tar.bz2-filer er almindelige på Linux, vil Windows-brugere sandsynligvis sende dig et arkiv i ZIP-format. Og hvis du vil arkivere nogle filer og sende dem til en Windows-bruger, vil ZIP-formatet være den nemmeste og mest kompatible løsning for alle.

RELATERET: Sådan udpakkes filer fra en .tar.gz- eller .tar.bz2-fil på Linux

zip, pakke ud og Andre hjælpeprogrammer

Du ved muligvis allerede, at Linux og Unix-lignende operativsystemer såsom macOS har værktøjer, der giver dig mulighed for at oprette ZIP-filer og udtrække filer fra dem, kaldet zipog unzip. Men der er en hel familie af relaterede ydelser såsom zipcloak, zipdetails, zipsplitog zipinfo.

Vi kontrollerede nogle Linux-distributioner for at se, om de inkluderede disse værktøjer i standardinstallationen. Alle hjælpeprogrammer var til stede i Ubuntu 19.04, 18.10 og 18.04. De var også til stede i Manjaro 18.04. Fedora 29 inkluderede zipog unzip, men ingen af ​​de andre hjælpeprogrammer, og det var også tilfældet for CentOS.

For at installere de manglende elementer på Fedora 29 skal du bruge følgende kommando:

sudo dnf installer perl-IO-Compress

For at installere de manglende elementer på CentOS 7 skal du bruge følgende kommando:

sudo yum installer perl-IO-Compress

Hvis nogen af ​​zip-hjælpeprogrammerne mangler fra en Linux-distribution, der ikke blev nævnt ovenfor, skal du bruge Linux-distributionens pakkehåndteringsværktøj til at installere den krævede pakke.

Sådan oprettes en ZIP-fil med zip-kommandoen

For at oprette en ZIP-fil skal du fortælle zipnavnet på arkivfilen, og hvilke filer der skal medtages i den. Du behøver ikke at tilføje ".zip" -udvidelsen til arkivnavnet, men det gør ingen skade, hvis du gør det.

For at oprette en fil, der hedder source_code.zipalle C-kildekodefiler og headerfiler i det aktuelle bibliotek, skal du bruge denne kommando:

zip kildekode * .c * .h

Hver fil vises, når den er tilføjet. Navnet på filen og den komprimeringsmængde, der blev opnået på den fil, vises.

Hvis du ser på det nye ZIP-arkiv, kan du se, at ".zip" -filtypen er tilføjet automatisk af zip.

ls -l source_code.zip

Hvis du ikke vil se output fra, zipnår ZIP-filen oprettes, skal du bruge indstillingen -q(stille).

zip -q kildekode * .c * .h

Herunder kataloger i ZIP-filer

For at inkludere underkataloger i ZIP-filen skal du bruge indstillingen -r(rekursiv) og inkludere navnet på underkataloget på kommandolinjen. Brug denne kommando til at oprette en ZIP-fil som før og også inkludere arkivundermappen.

zip -r -q kildekode arkiv / * .c * .h

For at være hensynsfuld over for den person, der udpakker filerne fra den ZIP-fil, du opretter, er det ofte høfligt at oprette ZIP-filer med filerne inde i den indeholdt i en mappe. Når den person, der modtager ZIP-filen udpakker den, placeres alle filerne pænt i et bibliotek på deres computer.

I den følgende kommando arkiverer vi workbiblioteket og alle underkataloger. Bemærk, at denne kommando bliver udstedt fra overordnede bibliotek af workmappen.

zip -r -q kildekode arbejde /

Indstilling af kompressionsniveau

Du kan indstille, hvor meget komprimering der skal anvendes på filerne, når de føjes til ZIP-arkivet. Området er fra 0 til 9, hvor 0 slet ikke er kompression. Jo højere komprimering, jo længere tid tager det at oprette ZIP-filen. For ZIP-filer i beskedent størrelse er tidsforskellen ikke en væsentlig straf. Men så for ZIP-filer i beskedent størrelse er standardkomprimeringen (niveau 6) sandsynligvis god nok alligevel.

For at komme ziptil at bruge et bestemt komprimeringsniveau skal du sende nummeret som en mulighed på kommandolinjen med et “-”, som dette:

zip -0 -r -q kildekode arbejde /

Standardkomprimeringsniveauet er 6. Der er ingen grund til at give -6indstillingen, men det vil ikke skade, hvis du gør det.

zip -r -q kildekode arbejde /

Det maksimale kompressionsniveau er niveau 9.

zip -9 -r -q kildekode arbejde /

Når udvalget af filer og mapper arkiveres her, er forskellen mellem ingen komprimering (niveau 0) og standardkomprimeringen (niveau 6) 400K. Forskellen mellem standardkomprimering og det højeste komprimeringsniveau (niveau 9) er kun 4K.

Det virker måske ikke meget, men for arkiver, der indeholder hundreder eller endda tusinder af filer, vil den lille mængde ekstra komprimering pr. Fil tilføje en god pladsbesparelse.

Tilføjelse af adgangskoder til ZIP-filer

Det er nemt at tilføje adgangskoder til ZIP-filer. Brug indstillingen -e(krypter), og du bliver bedt om at indtaste din adgangskode og indtaste den igen til bekræftelse.

zip -e -r -q kildekode arbejde /

Sådan udpakkes en ZIP-fil med unzip-kommandoen

For at udpakke filerne fra en ZIP-fil skal du bruge kommandoen til at pakke ud og angive ZIP-filens navn. Bemærk, at du gør behovet for at give den ”.zip” udvidelse.

unzip source_code.zip

Når filerne ekstraheres, vises de i terminalvinduet.

ZIP-filer indeholder ikke detaljer om filejerskab. Alle filerne, der udpakkes, har ejeren indstillet til den bruger, der udpakker dem.

Ligesom zip, unzip har en -q(stille) mulighed, så du ikke behøver at se filen notering som filerne er udvundet.

unzip -q source_code.zip

Udpakning af filer til et målkatalog

For at få filerne udpakket i en bestemt mappe skal du bruge indstillingen -d(bibliotek) og angive stien til den mappe, du ønsker, at arkivet skal udvindes til.

unzip -q source_code.zip -d ./udvikling

Uddrag adgangskodebeskyttede ZIP-filer

Hvis en ZIP-fil er oprettet med en adgangskode, unzipbeder du dig om adgangskoden. Hvis du ikke angiver den korrekte adgangskode,  unzipudpakkes ikke filerne.

unzip -q source_code.zip

Hvis du ikke er ligeglad med, at din adgangskode bliver set af andre - eller at den er gemt i din kommandohistorik - kan du angive adgangskoden på kommandolinjen med -P(adgangskode). (Du skal bruge store bogstaver "P.")

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

Ekskluderende filer

Hvis du ikke vil udpakke en bestemt fil eller gruppe af filer, skal du bruge indstillingen -x(ekskluder). I dette eksempel ønsker vi at udtrække alle filerne bortset fra dem, der ender med ".h" -udvidelsen.

unzip -q source_code.zip -x * .h

Overskrivning af filer

Antag at du har udpakket et arkiv, men at du ved en fejl har slettet et par af de udpakkede filer.

En hurtig løsning på det ville være at udtrække filerne igen. Men hvis du prøver at udpakke ZIP-filen i samme bibliotek som før, unzipvil du bede dig om en beslutning om overskrivning af filerne. Det forventer et af følgende svar.

Bortset fra r(omdøb) svaret er disse svar store og små bogstaver.

  • y: Ja, overskriv denne fil
  • n: Nej, overskriv ikke denne fil
  • A: Alle, overskriv alle filerne
  • N: Ingen, overskriv ingen af ​​filerne
  • r: Omdøb, udpak denne fil, men giv den et nyt navn. Du bliver bedt om at angive et nyt navn.

For at tvinge unziptil at overskrive eksisterende filer skal du bruge indstillingen -o(overskriv).

unzip -o -q source_code.zip

Den mest effektive måde at udskifte de manglende filer på ville være at have unzipkun udpakke filer i arkivet, der ikke er i målmappen. For at gøre dette skal du bruge indstillingen -n(aldrig overskriv).

unzip -n source_code.zip

Kigger inde i en ZIP-fil

Det er ofte nyttigt og lærerigt at se en liste over filerne i en ZIP-fil, før du udpakker den. Du kan gøre dette med indstillingen -l(listearkiv). Det ledes igennem for lessat gøre output håndterbar.

unzip -l source_code.zip | mindre

Outputtet viser mapper og filer i ZIP-filen, deres længde og det tidspunkt og den dato, de blev føjet til arkivet. Tryk på “q” for at afslutte less.

Der er andre måder at kigge inde i en ZIP-fil, der giver forskellige typer information, som vi skal se.

Tilføj en adgangskode med zipcloak-kommandoen

Hvis du har oprettet en ZIP-fil, men har glemt at tilføje en adgangskode, hvad kan du gøre? Du kan hurtigt tilføje en adgangskode til ZIP-filen ved hjælp af zipcloakkommandoen. Giv navnet på ZIP-filen på kommandolinjen. Du bliver bedt om at angive et kodeord. Du skal bekræfte adgangskoden ved at indtaste den en anden gang.

zipcloak source_code.zip

Se filoplysninger med zipdetails-kommandoen

Den zipdetailskommando vil vise dig en masse af oplysninger om ZIP-fil. Den eneste fornuftige måde at håndtere den mængde output, som denne kommando kan give, er at røre den igennem less.

zipdetails source_code.zip | mindre

Bemærk, at oplysningerne inkluderer filnavne, selvom ZIP-filen er beskyttet med adgangskode. Denne type information er gemt i ZIP-filen som metadata og er ikke en del af de krypterede data.

Søg inde i filen med zipgrep-kommandoen

Den zipgrepkommandoen tillader dig at søge inden filerne i en ZIP-fil. I det følgende eksempel vil vi vide, hvilke filer i ZIP-filen der har teksten "keyval.h".

zipgrep keyval.h source_code.zip

Vi kan se, at filerne slang.cog getval.cindeholder strengen "keyval.h". Vi kan også se, at der er to kopier af hver af disse filer i forskellige kataloger i ZIP-filen.

Se oplysninger med zipinfo-kommandoen

Den zipinfokommando giver dig endnu en måde at se inde i en ZIP-fil. Som før rør vi output igennem less.

zipinfo source_code.zip | mindre

Fra venstre mod højre viser output:

  • Filtilladelserne
  • Den version af værktøjet, der blev brugt til at oprette ZIP-filen
  • Den originale filstørrelse
  • En filbeskrivelse (beskrevet nedenfor)
  • Metoden til kompression (deflation, i dette tilfælde)
  • Data og tidsstempel
  • Navnet på filen og ethvert bibliotek

Filbeskrivelsen består af to tegn. Det første tegn vil være et “t” eller et “b” for at angive en tekst eller binær fil. Hvis det er et stort bogstav, er filen krypteret. Det andet tegn kan være et af fire tegn. Dette tegn repræsenterer, hvilken type metadata der er inkluderet i denne fil: ingen, et udvidet lokalt overskrift, et "ekstra felt" eller begge dele.

  • -: Hvis ingen af ​​dem findes, vil karakteren være en bindestreg
  • l: hvis der er en udvidet lokal overskrift, men ikke noget ekstra felt
  • x: hvis der ikke er nogen udvidet lokal overskrift, men der er et ekstra felt
  • X: hvis der er en udvidet lokal overskrift, og der er et ekstra felt

Opdel filen med zipsplit-kommandoen

Hvis du har brug for at sende ZIP-filen til en anden, men der er størrelsesbegrænsninger eller problemer med transmission af filen, kan du bruge zipsplitkommandoen til at opdele den originale ZIP-fil i et sæt mindre ZIP-filer.

Indstillingen -n(størrelse) giver dig mulighed for at indstille en maksimal størrelse for hver af de nye ZIP-filer. I dette eksempel deler vi source_code.zipfilen. Vi ønsker ikke, at nogen af ​​de nye ZIP-filer skal være større end 100 KB (102400 bytes).

zipsplit -n 102400 source_code.zip

Den valgte størrelse kan ikke være mindre end størrelsen på nogen af ​​filerne i ZIP-filen.

Ved hjælp af disse kommandoer kan du oprette dine egne ZIP-filer, pakke ZIP-filer, du modtager, og udføre forskellige andre operationer på dem uden nogensinde at forlade Linux-terminalen.