Articles

Hur Zip eller packa upp filer från Linux-terminalen

  • Dave McKay

    @TheGurkha

  • Uppdaterad 28 maj 2019, 5:15pm EDT
Linux shell prompt
Fatmawati Achmad zaenuri/.com

zip-filer är ett universellt arkiv som vanligtvis används på Windows, MacOS och till och med Linux-system. Du kan skapa ett zip-arkiv eller packa upp filer från en med några vanliga Linux-terminalkommandon.

ZIP-komprimerat arkivfilformat

tack vare dominansen av ZIP-formatet i Windows-riket är ZIP-filer förmodligen den vanligaste formen av komprimerat arkiv i världen.

medan .tjära.GZ-och tar.bz2-filer är vanliga på Linux, Windows-användare skickar förmodligen ett arkiv i ZIP-format. Och om du vill arkivera några filer och skicka dem till en Windows-användare är ZIP-formatet den enklaste, mest kompatibla lösningen för alla.

relaterat: hur man extraherar filer från en .tjära.gz eller .tjära.bz2-fil på Linux

zip, unzip och andra verktyg

Du kanske redan vet att Linux och Unix-liknande operativsystem som macOS har verktyg som låter dig skapa ZIP-filer och extrahera filer från dem, kalladezip ochunzip. Men det finns en hel familj av relaterade verktyg som zipcloakzipdetailszipsplitoch zipinfo.

annons

vi kontrollerade några Linux-distributioner för att se om de inkluderade dessa verktyg i standardinstallationen. Alla verktyg var närvarande i Ubuntu 19.04, 18.10 och 18.04. De var också närvarande i Manjaro 18.04. Fedora 29 inkluderade zip och unzip, men inget av de andra verktygen och det var också fallet för CentOS.

för att installera de saknade elementen på Fedora 29, använd följande kommando:

sudo dnf install perl-IO-Compress

zip installationskommando för Fedora

för att installera de saknade elementen på CentOS 7, använd följande kommando:

sudo yum install perl-IO-Compress

zip install Command i CentOS

annons

om något av zip-verktygen saknas från en Linux-distribution som inte nämnts ovan, använd den Linux-distributionens pakethanteringsverktyg för att installera det önskade paketet.

så här skapar du en ZIP-fil med zip-kommandot

för att skapa en ZIP-fil måste du berätta zip namnet på arkivfilen och vilka filer som ska inkluderas i den. Du behöver inte lägga till”.zip ” förlängning till arkivnamnet, men det gör ingen skada om du gör det.

för att skapa en fil som heter source_code.zip innehåller alla C-källkodsfiler och rubrikfiler i den aktuella katalogen, skulle du använda det här kommandot:

zip source_code *.c *.h

zip-kommando i ett terminalfönster

varje fil är listad som den läggs till. Namnet på filen och mängden komprimering som uppnåddes på den filen visas.

utgång från zip-kommandot i ett terminalfönster

annons

om du tittar på det nya ZIP-arkivet kan du se att ”.zip ” filtillägg har lagts till automatiskt av zip.

ls -l source_code.zip

ls på zip-arkivet i ett terminalfönster

Om du inte vill se utmatningen från zip när ZIP-filen skapas använder du -q (tyst) alternativ.

zip -q source_code *.c *.h

-Q tyst alternativ i ett terminalfönster

inklusive kataloger i ZIP-filer

om du vill inkludera underkataloger i ZIP-filen använder du alternativet -r (rekursivt) och inkluderar namnet på underkatalogerna-katalog på kommandoraden. För att skapa en ZIP-fil som tidigare och även inkludera arkivunderkatalogen, använd det här kommandot.

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

-r rekursivt alternativ i ett terminalfönster

för att vara hänsynsfull mot den person som kommer att extrahera filerna från ZIP-filen du skapar är det ofta artigt att skapa ZIP-filer med filerna inuti den i en katalog. När personen som tar emot ZIP-filen extraherar den placeras alla filer snyggt i en katalog på sin dator.

annons

i följande kommando ska vi arkivera katalogen work och alla underkataloger. Observera att detta kommando utfärdas från den överordnade katalogen för mappen work.

zip -r -q source_code work/

zippa arbetskatalogen i ett terminalfönster

ställa in komprimeringsnivån

Du kan ställa in hur mycket komprimering som ska tillämpas på filerna när de läggs till i ZIP-arkivet. Intervallet är från 0 till 9, med 0 som ingen komprimering alls. Ju högre komprimering, desto längre tid tar det att skapa ZIP-filen. För måttligt stora ZIP-filer är tidsskillnaden inte ett betydande straff. Men då, för måttligt stora ZIP-filer, är standardkomprimeringen (nivå 6) förmodligen tillräckligt bra ändå.

för att fåzip för att använda en viss komprimeringsnivå, skicka numret som ett alternativ på kommandoraden, med en ”-”, så här:

zip -0 -r -q source_code work/

-0 komprimeringsalternativ i ett terminalfönster

standardkomprimeringsnivån är 6. Det finns inget behov av att ange alternativet -6, men det gör ingen skada om du gör det.

zip -r -q source_code work/

nivå 6-komprimering i ett terminalfönster

den maximala komprimeringsnivån är Nivå 9.

zip -9 -r -q source_code work/

-9 komprimering i ett terminalfönster

annons

med valet av filer och kataloger som arkiveras här är skillnaden mellan ingen komprimering (nivå 0) och standardkomprimeringen (nivå 6) 400K. Skillnaden mellan standardkomprimeringen och den högsta komprimeringsnivån (nivå 9) är bara 4K.

det kanske inte verkar mycket, men för arkiv som innehåller hundratals eller till och med tusentals filer skulle den lilla mängden extra komprimering per fil lägga till en värdefull platsbesparing.

att lägga till lösenord till ZIP-filer

att lägga till lösenord till ZIP-filer är enkelt. Använd alternativet -e (kryptera) och du uppmanas att ange ditt lösenord och ange det igen för verifiering.

zip -e -r -q source_code work/

lägga till lösenord till zip-filer i ett terminalfönster

så här packar du upp en ZIP-fil med unzip-kommandot

för att extrahera filerna från en ZIP-fil, använd kommandot unzip och ange namnet på ZIP-filen. Observera att du behöver tillhandahålla ”.zip ” förlängning.

unzip source_code.zip

unzip-kommandot i ett terminalfönster

annons

När filerna extraheras listas de till terminalfönstret.

utmatning av unzip i ett terminalfönster

ZIP-filer innehåller inte detaljer om filägande. Alla filer som extraheras har ägaren inställd på användaren som extraherar dem.

precis somzipunzip har ett-q (tyst) alternativ, så att du inte behöver se fillistan när filerna extraheras.

unzip -q source_code.zip

unzip-q-alternativet i ett terminalfönster

extrahera filer till en målkatalog

för att få filerna extraherade i en specifik katalog, använd alternativet -d (katalog) och ange sökvägen till katalogen du vill att arkivet ska extraheras till.

unzip -q source_code.zip -d ./development

packa upp till en målkatalog i ett terminalfönster

extrahera lösenordsskyddade ZIP-filer

om en ZIP-fil har skapats med ett lösenord kommer unzip att be dig om lösenordet. Om du inte anger rätt lösenord kommerunzip inte att extrahera filerna.

unzip -q source_code.zip

kommandot packa upp med lösenord i ett terminalfönster

annons

Om du inte bryr dig om att ditt lösenord ses av andra—inte heller om att det lagras i din kommandohistorik—kan du ange lösenordet på kommandoraden med -P (lösenord) alternativ. (Du måste använda ett kapital ” P.”)

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

packa upp med lösenord alternativ i ett terminalfönster

exklusive filer

om du inte vill extrahera en viss fil eller grupp av filer, använd alternativet -x (exclude). I det här exemplet vill vi extrahera alla filer förutom de som slutar i en ”.h ” förlängning.

unzip -q source_code.zip -x *.h

unzip Uteslut alternativ i ett terminalfönster

skriva över filer

anta att du har extraherat ett arkiv men du har tagit bort några av de extraherade filerna av misstag.

annons

en snabb lösning för det skulle vara att extrahera filerna igen. Men om du försöker extrahera ZIP-filen i samma katalog som tidigare, kommer unzip att be dig om ett beslut om att skriva över filerna. Det kommer att förvänta sig ett av följande svar.

bortsett frånr (Byt namn) svar, dessa svar är skiftlägeskänsliga.

  • y: ja, Skriv över den här filen
  • n: Nej, skriv inte över den här filen
  • A: ALLA, Skriv över alla filer
  • N: None, Skriv över ingen av filerna
  • R: Byt namn, extrahera den här filen men ge den ett nytt namn. Du kommer att bli uppmanad till ett nytt namn.

Skriv över prompter i ett terminalfönster

för att tvingaunzip för att skriva över befintliga filer använd alternativet-o (Skriv över).

unzip -o -q source_code.zip

Skriv över alternativet i ett terminalfönster

det mest effektiva sättet att ersätta de saknade filerna skulle vara att ha unzip bara extrahera filer i arkivet som inte finns i målkatalogen. För att göra detta, använd alternativet -n (skriv aldrig över).

unzip -n source_code.zip

packa upp med-n skriv aldrig över alternativet i ett terminalfönster

titta inuti en ZIP-fil

det är ofta användbart och lärorikt att se en lista över filerna i en ZIP-fil innan du extraherar den. Du kan göra detta med alternativet -l (listarkiv). Den leds genom less för att göra utgången hanterbar.

unzip -l source_code.zip | less

unzip notering alternativ i ett terminalfönster

annons

utgången visar kataloger och filer i ZIP-filen, deras längd och tid och datum de Lades till i arkivet. Tryck på ”q”för att avsluta från less.

lista arkivutgång i ett terminalfönster

det finns andra sätt att kika in i en ZIP-fil som ger olika typer av information, som vi ska se.

Lägg till ett lösenord med zipcloak-kommandot

Om du har skapat en ZIP-fil men glömt att lägga till ett lösenord, vad kan du göra? Du kan snabbt lägga till ett lösenord till ZIP-filen med kommandotzipcloak. Passera namnet på ZIP-filen på kommandoraden. Du kommer att bli ombedd att ange ett lösenord. Du måste verifiera lösenordet genom att ange det en andra gång.

zipcloak source_code.zip

zipcloak i ett terminalfönster

Visa filinformation med kommandot zipdetails

kommandot zipdetails visar dig mycket information om ZIP-filen. Det enda förnuftiga sättet att hantera mängden utgång som detta kommando kan ge är att pipa det genom less .

zipdetails source_code.zip | less

kommandot zipdetails i ett terminalfönster

annons

Observera att informationen kommer att innehålla filnamn även om ZIP-filen är lösenordsskyddad. Denna typ av information lagras i ZIP-filen som metadata och ingår inte i krypterad data.

utgång av zipdetaljer i ett terminalfönster

Sök inuti filen med zipgrep-kommandot

zipgrep – kommandot låter dig söka i filerna i en ZIP-fil. I följande exempel vill vi veta vilka filer i ZIP-filen som har texten ”keyval.h ” i dem.

zipgrep keyval.h source_code.zip

zipgrep-kommandot i ett terminalfönster

Vi kan se att filerna slang.c och getval.c innehåller strängen ”keyval.h”.Vi kan också se att det finns två kopior av var och en av dessa filer i olika kataloger i ZIP-filen.

visa Information med kommandot zipinfo

kommandotzipinfo ger dig ännu ett sätt att titta inuti en ZIP-fil. Som tidigare rör vi utmatningen genom less.

zipinfo source_code.zip | less

zipinfo-kommandot i ett terminalfönster

från vänster till höger visar utmatningen:

  • filbehörigheterna
  • versionen av verktyget som används för att skapa ZIP-filen
  • den ursprungliga filstorleken
  • en fil deskriptor (beskrivs nedan)
  • metoden för komprimering (deflation, i detta fall)
  • data och tidsstämpel
  • namnet på filen och någon katalog
annons

filen och en katalog deskriptor består av två tecken. Det första tecknet kommer att vara en ”t” eller en ”b” för att indikera en text eller binär fil. Om det är en stor bokstav är filen krypterad. Det andra tecknet kan vara en av fyra tecken. Detta tecken representerar vilken typ av metadata som ingår för den här filen: ingen, en utökad lokal rubrik, ett ”extra fält” eller båda.

  • -: om det inte finns något, kommer tecknet att vara ett bindestreck
  • l: om det finns en utökad lokal rubrik men inget extra fält
  • x: om det inte finns någon utökad lokal rubrik men det finns ett extra fält
  • X: om det finns en utökad lokal rubrik och det finns ett extra fält

zipinfo-utgång i ett terminalfönster

dela filen med zipsplit-kommandot

om du behöver skicka ZIP-filen till någon annan men det finns storleksbegränsningar eller problem med överföringen av filen kan du använda zipsplit kommando för att dela upp den ursprungliga zip-filen i en uppsättning mindre zip-filer.

alternativet-n (storlek) låter dig ställa in en maximal storlek för var och en av de nya ZIP-filerna. I det här exemplet delar vi upp filen source_code.zip. Vi vill inte att någon av de nya ZIP-filerna ska vara större än 100 KB (102400 byte).

zipsplit -n 102400 source_code.zip

zipsplit-kommandot i ett terminalfönster

annons

storleken du väljer kan inte vara mindre än storleken på någon av filerna i ZIP-filen.

med hjälp av dessa kommandon kan du skapa dina egna ZIP-filer, packa upp ZIP-filer du får och utföra olika andra operationer på dem utan att någonsin lämna Linux-terminalen.

Dave McKay
Dave McKay använde först datorer när stansat pappersband var på modet, och han har programmerat sedan dess. Efter över 30 år i IT-branschen är han nu en heltidsteknikjournalist. Under sin karriär har han arbetat som frilansprogrammerare, chef för ett internationellt mjukvaruutvecklingsteam, projektledare för IT-tjänster och senast som dataskyddsombud. Dave är en Linux evangelist och öppen källkod förespråkare.Läs hela Bio ”