Hvordan trekke ut filer fra en .tar.gz- eller .tar.bz2-fil på Linux

Tar-filer er komprimerte arkiver. Du vil møte dem ofte mens du bruker en Linux-distribusjon som Ubuntu eller til og med mens du bruker terminalen på macOS. Slik trekker du ut – eller fjerner – innholdet i en tar-fil, også kjent som en tarball.

Hva betyr .tar.gz og .tar.bz2?

Filer som har filtypen .tar.gz eller .tar.bz2, er komprimerte arkivfiler. En fil med bare filtypen .tar er ukomprimert, men de vil være svært sjeldne.

.tar-delen av filtypen står for tape archive, og er grunnen til at begge disse filtypene kalles tar-filer. Tar-filer dateres helt tilbake til 1979 da tar-kommandoen ble opprettet for å tillate systemadministratorer å arkivere filer på bånd. Førti år senere bruker vi fortsatt tar-kommandoen til å trekke ut tar-filer på harddiskene våre. Noen et sted bruker sannsynligvis fortsatt tjære med tape.

Suffikset .gz eller .bz2 indikerer at arkivet har blitt komprimert ved å bruke enten gzip- eller bzip2-komprimeringsalgoritmen. Tar-kommandoen vil fungere godt med begge filtyper, så det spiller ingen rolle hvilken komprimeringsmetode som ble brukt – og den bør være tilgjengelig overalt hvor du har et Bash-skall. Du trenger bare å bruke de riktige tar-kommandolinjealternativene.

Pakk ut filer fra Tar-filer

La oss si at du har lastet ned to filer med noteark. Den ene filen heter ukulele_songs.tar.gz , den andre heter guitar_songs.tar.bz2. Disse filene er i nedlastingskatalogen.

  Slik sletter du filer og kataloger i Linux-terminalen

La oss trekke ut ukulele-sangene:

tar -xvzf ukulele_songs.tar.gz

Etter hvert som filene pakkes ut, vises de i terminalvinduet.

Kommandolinjealternativene vi brukte er:

-x: Pakk ut, hent filene fra tar-filen.
-v: Utførlig, lister filene etter hvert som de pakkes ut.
-z: Gzip, bruk gzip for å dekomprimere tar-filen.
-f: Fil, navnet på tar-filen vi vil at tar skal fungere med. Dette alternativet må følges av navnet på tar-filen.

List filene i katalogen med ls og du vil se at det er opprettet en katalog kalt Ukulele Songs. De utpakkede filene er i den katalogen. Hvor kom denne katalogen fra? Den var inneholdt i tar-filen, og ble pakket ut sammen med filene.

La oss nå trekke ut gitarsangene. For å gjøre dette bruker vi nesten nøyaktig samme kommando som før, men med en viktig forskjell. .bz2-utvidelsens suffiks forteller oss at den har blitt komprimert ved å bruke bzip2-kommandoen. I stedet for å bruke alternativet-z (gzip), bruker vi alternativet -j (bzip2).

tar -xvjf guitar_songs.tar.bz2

Nok en gang blir filene oppført til terminalen etter hvert som de pakkes ut. For å være tydelig var kommandolinjealternativene vi brukte med tar for .tar.bz2-filen:

-x: Pakk ut, hent filene fra tar-filen.
-v: Utførlig, lister filene etter hvert som de pakkes ut.
-j: Bzip2, bruk bzip2 for å dekomprimere tar-filen.
-f: Fil, navnet på tar-filen vi vil at tar skal jobbe med.

Hvis vi viser filene i nedlastningskatalogen, vil vi se at en annen katalog kalt Guitar Songs er opprettet.

  Slik bruker du uniq-kommandoen på Linux

Velge hvor filene skal pakkes ut

Hvis vi vil trekke ut filene til et annet sted enn den gjeldende katalogen, kan vi spesifisere en målkatalog ved å bruke alternativet -C (spesifisert katalog).

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

Når vi ser i katalogen Dokumenter/Sanger, vil vi se at katalogen for Gitarsanger er opprettet.

Merk at målkatalogen allerede må eksistere, tar vil ikke opprette den hvis den ikke finnes. Hvis du trenger å lage en katalog og få tar ut filene i det hele i én kommando, kan du gjøre det som følger:

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

Alternativet -p (foreldre) får mkdir til å opprette alle overordnede kataloger som er nødvendige, og sikrer at målkatalogen er opprettet.

Se inn i Tar-filer før du pakker dem ut

Så langt har vi bare tatt et sprang i tro og trukket ut filene som ikke er sett. Du vil kanskje se før du hopper. Du kan se gjennom innholdet i en tar-fil før du trekker den ut ved å bruke -t (liste)-alternativet. Det er vanligvis praktisk å sende utdataene gjennom less-kommandoen.

tar -tf ukulele_songs.tar.gz | less

Legg merke til at vi ikke trenger å bruke -z-alternativet for å liste filene. Vi trenger bare å legge til -z-alternativet når vi trekker ut filer fra en .tar.gz-fil. På samme måte trenger vi ikke alternativet -j for å liste filene i en tar.bz2-fil.

Ved å bla gjennom utdataene kan vi se at alt i tar-filen holdes i en katalog kalt Ukulele Songs, og i den katalogen er det filer og andre kataloger.

  Slik løser du problemer med Corsair-mus og tastatur på macOS og Linux

Vi kan se at Ukulele Songs-katalogen inneholder kataloger kalt Random Songs, Ramones og Possibles.

For å pakke ut alle filene fra en katalog i en tar-fil, bruk følgende kommando. Merk at banen er pakket inn i anførselstegn fordi det er mellomrom i banen.

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

For å pakke ut en enkelt fil, oppgi banen og navnet på filen.

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

Du kan trekke ut et utvalg filer ved å bruke jokertegn, der * representerer en hvilken som helst streng med tegn og ? representerer et enkelt tegn. Bruk av jokertegn krever bruk av –jokertegn-alternativet.

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

Pakk ut filer uten å pakke ut kataloger

Hvis du ikke vil at katalogstrukturen i tar-filen skal gjenskapes på harddisken din, bruk alternativet –strip-components. Alternativet –strip-components krever en numerisk parameter. Tallet representerer hvor mange nivåer av kataloger som skal ignoreres. Filer fra de ignorerte katalogene trekkes fortsatt ut, men katalogstrukturen er ikke replikert på harddisken.

Hvis vi spesifiserer –strip-components=1 med vårt eksempel tar-fil, vil ikke Ukulele Songs øverste katalog i tar-filen opprettes på harddisken. Filene og katalogene som ville blitt pakket ut til den katalogen, pakkes ut i målkatalogen.

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

Det er bare to nivåer av kataloghekking i vårt eksempel tar-fil. Så hvis vi bruker –strip-components=2, blir alle filene trukket ut i målkatalogen, og ingen andre kataloger opprettes.

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

Hvis du ser på Linux mannside du vil se at tar må være en god kandidat for tittelen «kommando som har flest kommandolinjealternativer.» Heldigvis, for å tillate oss å trekke ut filer fra .tar.gz- og tar.bz2-filer med en god grad av granulær kontroll, trenger vi bare å huske en håndfull av disse alternativene.