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

Tar-filer är en form av komprimerade arkiv, ofta använda inom Linux-miljöer som Ubuntu och även via terminalen på macOS. Denna guide förklarar hur du packar upp – eller extraherar – innehållet från dessa filer, även kallade ”tarballs”.

Förstå .tar.gz och .tar.bz2

Filer med ändelserna .tar.gz eller .tar.bz2 indikerar komprimerade arkiv. En fil med enbart .tar-ändelsen är okomprimerad, men dessa är ovanliga.

”.tar”-delen i filändelsen står för ”tape archive” (bandarkiv) och ger filtypen dess namn. Tar-filer skapades ursprungligen 1979 för att underlätta bandarkivering av filer av systemadministratörer. Trots att tekniken har utvecklats, används tar-kommandot fortfarande för att extrahera arkiv till hårddiskar. Det finns troligen fortfarande de som använder band för arkivering.

Suffixen .gz eller .bz2 anger att arkivet har komprimerats med antingen gzip- eller bzip2-algoritmer. Tar-kommandot hanterar båda filtyperna, så komprimeringsmetoden spelar ingen roll – och kommandot är oftast tillgängligt i alla Bash-skal. Du behöver bara använda rätt flaggor i kommandoraden.

Extrahera filer

Anta att du har laddat ner två arkiv med noter: ”ukulele_songs.tar.gz” och ”guitar_songs.tar.bz2” i din nedladdningsmapp.

För att packa upp filerna för ukulele, använd följande kommando:

tar -xvzf ukulele_songs.tar.gz

Under extraheringen visas en lista med filerna i terminalfönstret.

Flagorna som används i kommandot betyder:

  • -x: Extrahera filerna från tar-arkivet.
  • -v: Verbose, listar filer under extraheringen.
  • -z: Gzip, dekomprimerar filen med gzip.
  • -f: Fil, anger namnet på tar-filen. Denna flagga måste följas av filnamnet.

När du listar innehållet i din nedladdningsmapp med ls, ser du att en ny mapp, ”Ukulele Songs”, har skapats. Denna mapp innehåller de extraherade filerna. Mappen fanns inuti tar-filen och extraherades tillsammans med filerna.

För att extrahera gitarrlåtarna, använder vi nästan samma kommando, men byter ut -z mot -j. Suffixet .bz2 visar att den komprimerats med bzip2.

tar -xvjf guitar_songs.tar.bz2

Filerna listas i terminalen under extraheringen. Flagorna vi använder för .tar.bz2 filen betyder:

  • -x: Extrahera filer.
  • -v: Verbose, listar filer under extraheringen.
  • -j: Bzip2, dekomprimerar med bzip2.
  • -f: Fil, anger filnamnet.

En ny mapp, ”Guitar Songs”, har skapats.

Bestäm extraktionsplats

Du kan styra var filerna extraheras med flaggan -C (specificerad katalog).

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

Nu finns ”Guitar Songs”-mappen i mappen Dokument/Låtar.

Observera att målmappen måste existera. tar kommer inte att skapa den automatiskt. Om du behöver skapa mappen och extrahera filerna i ett och samma kommando, använd följande:

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

Flaggan -p (föräldrar) för mkdir gör att alla nödvändiga överordnade mappar skapas.

Inspektera tar-filer

Innan du extraherar filerna kan det vara bra att se vad arkivet innehåller. Du kan göra detta med flaggan -t (lista). Det är också praktiskt att leda utmatningen genom less.

tar -tf ukulele_songs.tar.gz | less

Lägg märke till att vi inte behöver -z för att lista filerna, bara när vi extraherar från en .tar.gz fil. På samma sätt behövs inte -j för att lista filerna i en .tar.bz2 fil.

Genom utmatningen ser vi att allt i arkivet ligger inuti en mapp som heter ”Ukulele Songs”, som innehåller både filer och undermappar.

Inuti ”Ukulele Songs” finns mappar som ”Random Songs”, ”Ramones” och ”Possibles”.

För att extrahera alla filer från en specifik mapp i arkivet, ange sökvägen, inom citattecken om den innehåller mellanslag:

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

För att extrahera en enskild fil, ange filens fullständiga sökväg:

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

Du kan använda jokertecken, där * representerar en valfri sträng och ? representerar ett valfritt tecken. För att använda jokertecken måste du lägga till flaggan --wildcards.

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

Extrahera filer utan mappar

Om du inte vill att mappstrukturen från arkivet ska återskapas, kan du använda flaggan --strip-components. Den tar en siffra som parameter och representerar antalet mappnivåer som ska ignoreras. Filer från de ignorerade mapparna extraheras fortfarande, men utan mappstrukturen.

Med --strip-components=1 skapas inte mappen ”Ukulele Songs”. Filerna och eventuella undermappar hamnar direkt i målmappen.

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

Det finns två nivåer av mappning i det här exemplet. Med --strip-components=2 extraheras alla filer direkt i målmappen, utan att någon mappstruktur skapas.

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

Enligt Linux manualsida är tar ett av kommandona med flest kommandoradsflaggor. Lyckligtvis behöver vi bara lära oss några få av dem för att effektivt hantera .tar.gz- och .tar.bz2-filer.