Hur man extraherar filer från en .tar.gz- eller .tar.bz2-fil på Linux

Tar-filer är komprimerade arkiv. Du kommer att stöta på dem ofta när du använder en Linux-distribution som Ubuntu eller till och med när du använder terminalen på macOS. Så här extraherar du – eller tar bort – innehållet i en tar-fil, även känd som en tarball.

Vad betyder .tar.gz och .tar.bz2?

Filer som har filtillägget .tar.gz eller .tar.bz2 är komprimerade arkivfiler. En fil med bara tillägget .tar är okomprimerad, men de kommer att vara mycket sällsynta.

.tar-delen av filtillägget står för tape archive och är anledningen till att båda dessa filtyper kallas tar-filer. Tar-filer går tillbaka till 1979 när kommandot tar skapades för att systemadministratörer skulle kunna arkivera filer på band. Fyrtio år senare använder vi fortfarande kommandot tar för att extrahera tar-filer till våra hårddiskar. Någon någonstans använder förmodligen fortfarande tjära med tejp.

Tilläggssuffixet .gz eller .bz2 indikerar att arkivet har komprimerats med antingen gzip- eller bzip2-komprimeringsalgoritmen. Tar-kommandot kommer att fungera bra med båda filtyperna, så det spelar ingen roll vilken komprimeringsmetod som användes – och den bör vara tillgänglig överallt där du har ett Bash-skal. Du behöver bara använda lämpliga tar kommandoradsalternativ.

Extrahera filer från Tar-filer

Låt oss säga att du har laddat ner två filer med noter. En fil heter ukulele_songs.tar.gz , den andra heter guitar_songs.tar.bz2. Dessa filer finns i nedladdningskatalogen.

Låt oss extrahera ukulele-låtarna:

tar -xvzf ukulele_songs.tar.gz

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

Kommandoradsalternativen vi använde är:

-x: Extrahera, hämta filerna från tar-filen.
-v: Utförlig, lista filerna när de extraheras.
-z: Gzip, använd gzip för att dekomprimera tar-filen.
-f: Fil, namnet på tar-filen vi vill att tar ska fungera med. Detta alternativ måste följas av namnet på tar-filen.

Lista filerna i katalogen med ls så ser du att en katalog har skapats som heter Ukulele Songs. De extraherade filerna finns i den katalogen. Var kom denna katalog ifrån? Den fanns i tar-filen och extraherades tillsammans med filerna.

Låt oss nu extrahera gitarrlåtarna. För att göra detta kommer vi att använda nästan exakt samma kommando som tidigare men med en viktig skillnad. Tilläggssuffixet .bz2 talar om för oss att det har komprimerats med kommandot bzip2. Istället för att använda alternativet-z (gzip), kommer vi att använda alternativet -j (bzip2).

tar -xvjf guitar_songs.tar.bz2

Återigen listas filerna till terminalen när de extraheras. För att vara tydlig var kommandoradsalternativen vi använde med tar för .tar.bz2-filen:

-x: Extrahera, hämta filerna från tar-filen.
-v: Utförlig, lista filerna när de extraheras.
-j: Bzip2, använd bzip2 för att dekomprimera tar-filen.
-f: Fil, namnet på tar-filen vi vill att tar ska fungera med.

Om vi ​​listar filerna i nedladdningskatalogen kommer vi att se att en annan katalog som heter Guitar Songs har skapats.

Välj var du vill extrahera filerna

Om vi ​​vill extrahera filerna till en annan plats än den aktuella katalogen, kan vi ange en målkatalog med alternativet -C (specificerad katalog).

tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/

När vi tittar i vår katalog för dokument/låtar ser vi att katalogen för gitarrlåtar har skapats.

Observera att målkatalogen redan måste finnas, tar kommer inte att skapa den om den inte finns. Om du behöver skapa en katalog och låta tar extrahera filerna till allt i ett kommando, kan du göra det på följande sätt:

mkdir -p ~/Documents/Songs/Downloaded && tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/Downloaded/

Alternativet -p (föräldrar) gör att mkdir skapar alla överordnade kataloger som krävs, vilket säkerställer att målkatalogen skapas.

Titta inuti Tar-filer innan du extraherar dem

Hittills har vi bara tagit ett steg i tro och extraherat filerna osedda. Du kanske vill titta innan du hoppar. Du kan granska innehållet i en tar-fil innan du extraherar den genom att använda alternativet -t (lista). Det är vanligtvis bekvämt att leda utgången genom kommandot less.

tar -tf ukulele_songs.tar.gz | less

Lägg märke till att vi inte behöver använda alternativet -z för att lista filerna. Vi behöver bara lägga till alternativet -z när vi extraherar filer från en .tar.gz-fil. På samma sätt behöver vi inte alternativet -j för att lista filerna i en tar.bz2-fil.

När vi bläddrar igenom utgången kan vi se att allt i tar-filen hålls i en katalog som heter Ukulele Songs, och i den katalogen finns det filer och andra kataloger.

Vi kan se att katalogen Ukulele Songs innehåller kataloger som heter Random Songs, Ramones och Possibles.

För att extrahera alla filer från en katalog i en tar-fil, använd följande kommando. Observera att sökvägen är inlindad med citattecken eftersom det finns mellanslag i sökvägen.

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/Ramones/"

För att extrahera en enskild fil, ange sökvägen och namnet på filen.

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/023 - My Babe.odt"

Du kan extrahera ett urval av filer genom att använda jokertecken, där * representerar en sträng med tecken och ? representerar vilket enskilt tecken som helst. Att använda jokertecken kräver att man använder alternativet –jokertecken.

tar -xvz --wildcards -f ukulele_songs.tar.gz "Ukulele Songs/Possibles/B*"

Extrahera filer utan att extrahera kataloger

Om du inte vill att katalogstrukturen i tar-filen ska återskapas på din hårddisk, använd alternativet –strip-components. Alternativet –strip-components kräver en numerisk parameter. Siffran representerar hur många nivåer av kataloger som ska ignoreras. Filer från de ignorerade katalogerna extraheras fortfarande, men katalogstrukturen replikeras inte på din hårddisk.

Om vi ​​anger –strip-components=1 med vårt exempel tar-fil, skapas inte Ukulele Songs översta katalog i tar-filen på hårddisken. Filerna och katalogerna som skulle ha extraherats till den katalogen extraheras i målkatalogen.

tar -xvzf ukulele_songs.tar.gz --strip-components=1

Det finns bara två nivåer av katalogkapsling i vårt exempel tar-fil. Så om vi använder –strip-components=2 extraheras alla filer i målkatalogen och inga andra kataloger skapas.

tar -xvzf ukulele_songs.tar.gz --strip-components=2

Om du tittar på Linux man page du kommer att se att tar måste vara en bra kandidat för titeln ”kommandot som har flest kommandoradsalternativ.” Tack och lov, för att tillåta oss att extrahera filer från .tar.gz- och tar.bz2-filer med en god grad av granulär kontroll, behöver vi bara komma ihåg en handfull av dessa alternativ.