Hur man zippar eller packar upp filer från Linux-terminalen

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

ZIP-komprimerat arkivfilformat

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

Medan .tar.gz- och tar.bz2-filer är vanliga på Linux, kommer Windows-användare förmodligen att skicka dig ett arkiv i ZIP-format. Och om du vill arkivera några filer och skicka dem till en Windows-användare, kommer ZIP-formatet att vara den enklaste och mest kompatibla lösningen för alla.

zip, packa upp 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, så kallade zip och unzip. Men det finns en hel familj av relaterade verktyg som zipcloak, zipdetails, zipsplit och zipinfo.

Vi kontrollerade några Linux-distributioner för att se om de inkluderade dessa verktyg i standardinstallationen. Alla verktyg fanns i Ubuntu 19.04, 18.10 och 18.04. De var också på plats 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

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

sudo yum install perl-IO-Compress

Om något av zip-verktygen saknas i en Linux-distribution som inte nämndes ovan, använd Linux-distributionens pakethanteringsverktyg för att installera det nödvändiga paketet.

Hur man skapar en ZIP-fil med zip-kommandot

För att skapa en ZIP-fil måste du ange zip-namnet på arkivfilen och vilka filer som ska inkluderas i den. Du behöver inte lägga till tillägget ”.zip” till arkivnamnet, men det skadar inte om du gör det.

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

zip source_code *.c *.h

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

Om du tittar på det nya ZIP-arkivet kan du se att filtillägget ”.zip” har lagts till automatiskt med zip.

ls -l source_code.zip

Om du inte vill se utdata från zip när ZIP-filen skapas, använd alternativet -q (tyst).

zip -q source_code *.c *.h

Inklusive kataloger i ZIP-filer

För att inkludera underkataloger i ZIP-filen, använd alternativet -r (rekursivt) och inkludera namnet på underkatalogen 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

För att ta hänsyn till den person som ska extrahera filerna från ZIP-filen du skapar, är det ofta artigt att skapa ZIP-filer med filerna i den i en katalog. När personen som tar emot ZIP-filen extraherar den placeras alla filer prydligt i en katalog på deras dator.

I följande kommando kommer vi att arkivera arbetskatalogen och alla underkataloger. Observera att det här kommandot utfärdas från arbetsmappens överordnade katalog.

zip -r -q source_code work/

Ställa in nivån för kompression

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

För att få zip att använda en specifik nivå av komprimering, skicka numret som ett alternativ på kommandoraden, med ett ”-”, så här:

zip -0 -r -q source_code work/

Standardkomprimeringsnivån är 6. Det finns inget behov av att tillhandahålla alternativet -6, men det kommer inte att skada om du gör det.

zip -r -q source_code work/

Den maximala kompressionsnivån är nivå 9.

zip -9 -r -q source_code work/

Med urvalet av filer och kataloger som arkiveras här är skillnaden mellan ingen komprimering (nivå 0) och standardkomprimering (nivå 6) 400K. Skillnaden mellan standardkomprimeringen och den högsta nivån av komprimering (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 utrymmesbesparing.

Lägga till lösenord till ZIP-filer

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

zip -e -r -q source_code work/

Hur man packar upp en ZIP-fil med kommandot unzip

För att extrahera filerna från en ZIP-fil, använd kommandot unzip och ange namnet på ZIP-filen. Observera att du måste ange tillägget ”.zip”.

unzip source_code.zip

När filerna extraheras visas de i terminalfönstret.

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

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

unzip -q source_code.zip

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

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 kommer unzip inte att extrahera filerna.

unzip -q source_code.zip

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

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

Exklusive filer

Om du inte vill extrahera en viss fil eller grupp av filer, använd alternativet -x (exkludera). I det här exemplet vill vi extrahera alla filer förutom de som slutar med tillägget ”.h”.

unzip -q source_code.zip -x *.h

Skriver över filer

Anta att du har extraherat ett arkiv men du har raderat några av de extraherade filerna av misstag.

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. Den kommer att förvänta sig ett av följande svar.

Förutom r-svaret (byt namn), är dessa svar skiftlägeskänsliga.

y: Ja, skriv över den här filen
n: Nej, skriv inte över den här filen
S: Alla, skriv över alla filer
N: Ingen, skriv över ingen av filerna
r: Byt namn, extrahera den här filen men ge den ett nytt namn. Du kommer att bli tillfrågad om ett nytt namn.

Använd alternativet -o (skriv över) för att tvinga upp packa upp för att skriva över befintliga filer.

unzip -o -q source_code.zip

Det mest effektiva sättet att ersätta de saknade filerna skulle vara att packa upp endast 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

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 igenom mindre för att göra produktionen hanterbar.

unzip -l source_code.zip | less

Utdatat visar katalogerna och filerna i ZIP-filen, deras längd och tid och datum de lades till i arkivet. Tryck på ”q” för att avsluta från mindre.

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 kommandot zipcloak. Skicka namnet på ZIP-filen på kommandoraden. Du kommer att bli tillfrågad om ett lösenord. Du måste verifiera lösenordet genom att ange det en andra gång.

zipcloak source_code.zip

Visa fildetaljer med kommandot zipdetails

Kommandot zipdetails kommer att visa dig mycket information om ZIP-filen. Det enda vettiga sättet att hantera mängden utdata som detta kommando kan ge är att röra igenom det mindre.

zipdetails source_code.zip | less

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 är inte en del av den krypterade datan.

Sök inuti filen med kommandot zipgrep

Kommandot zipgrep 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 sig.

zipgrep keyval.h source_code.zip

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

Kommandot zipinfo ger dig ännu ett sätt att titta in i en ZIP-fil. Som tidigare rör vi utgången genom mindre.

zipinfo source_code.zip | less

Från vänster till höger visar utgången:

Filbehörigheterna
Den version av verktyget som används för att skapa ZIP-filen
Den ursprungliga filstorleken
En filbeskrivning (beskrivs nedan)
Metoden för komprimering (deflation, i det här fallet)
Data och tidsstämpel
Namnet på filen och eventuell katalog

Filbeskrivningen består av två tecken. Det första tecknet kommer att vara ett ”t” eller ett ”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 ett 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 ingetdera finns, 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

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-kommandot 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 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

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 som du tar emot och utföra olika andra operationer på dem utan att någonsin lämna Linux-terminalen.