
Tar-bestanden zijn gecomprimeerde archieven. Je zult ze vaak tegenkomen tijdens het gebruik van een Linux-distributie zoals Ubuntu of zelfs tijdens het gebruik van de terminal op macOS. Hier leest u hoe u de inhoud van een tar-bestand, ook wel tarball genoemd, kunt extraheren (of untarren).
Wat betekenen .tar.gz en .tar.bz2?
Bestanden met een .tar.gz of een .tar.bz2 extensie zijn gecomprimeerde archiefbestanden. Een bestand met slechts een .tar extensie is niet gecomprimeerd, maar die zullen zeer zeldzaam zijn.
De .tar gedeelte van de bestandsextensie staat voor taap archive, en is de reden dat beide van deze bestandstypen tar-bestanden worden genoemd. Tar-bestanden dateren helemaal terug tot 1979 toen de tar opdracht is gemaakt om systeembeheerders in staat te stellen bestanden op tape te archiveren. Veertig jaar later gebruiken we nog steeds de tar commando om tar-bestanden op onze harde schijven uit te pakken. Iemand gebruikt waarschijnlijk nog steeds tar met tape.
De .gz of .bz2 extensie-achtervoegsel geeft aan dat het archief is gecomprimeerd met behulp van de gzip of bzip2 compressie-algoritme. De tar commando werkt prima met beide bestandstypen, dus het maakt niet uit welke compressiemethode werd gebruikt – en het zou overal beschikbaar moeten zijn waar je een Bash-shell hebt. U hoeft alleen de juiste te gebruiken tar opdrachtregelopties.
Bestanden uitpakken uit Tar-bestanden
Stel dat u twee bestanden met bladmuziek heeft gedownload. Een bestand heet ukulele_songs.tar.gz , wordt de andere genoemd guitar_songs.tar.bz2. Deze bestanden staan in de map Downloads.

Laten we de ukulele-nummers extraheren:
tar -xvzf ukulele_songs.tar.gz
Terwijl de bestanden worden uitgepakt, worden ze weergegeven in het terminalvenster.

De opdrachtregelopties die we hebben gebruikt, zijn:
- -X: Extract, haal de bestanden op uit het tar-bestand.
- -v: Uitgebreid, maak een lijst van de bestanden terwijl ze worden uitgepakt.
- -z: Gzip, gebruik gzip om het tar-bestand te decomprimeren.
-
-f: File, de naam van het tar-bestand dat we willen
tarwerken met. Deze optie moet worden gevolgd door de naam van het tar-bestand.
Maak een lijst van de bestanden in de map met ls en je zult zien dat er een map is gemaakt met de naam Ukulele Songs. De uitgepakte bestanden bevinden zich in die map. Waar komt deze directory vandaan? Het was opgenomen in het tar bestand, en werd samen met de bestanden uitgepakt.

Laten we nu de gitaarliedjes extraheren. Om dit te doen gebruiken we bijna exact hetzelfde commando als hiervoor, maar met een belangrijk verschil. De .bz2 extensie-achtervoegsel vertelt ons dat het is gecomprimeerd met de opdracht bzip2. In plaats van de-z (gzip) optie, zullen we de -j (bzip2) optie.
tar -xvjf guitar_songs.tar.bz2

Nogmaals, de bestanden worden op de terminal weergegeven terwijl ze worden uitgepakt. Voor de duidelijkheid, de opdrachtregelopties waarmee we gebruikten tar voor de .tar.bz2 bestand waren:
- -X: Extract, haal de bestanden op uit het tar-bestand.
- -v: Uitgebreid, maak een lijst van de bestanden terwijl ze worden uitgepakt.
- -j: Bzip2, gebruik bzip2 om het tar-bestand te decomprimeren.
- -f: Bestand, naam van het tar-bestand waarmee we met tar willen werken.
Als we de bestanden in de download-directory plaatsen, zullen we zien dat er een andere directory met de naam Guitar Songs is gemaakt.

Kiezen waar de bestanden naartoe moeten worden uitgepakt
Als we de bestanden willen uitpakken naar een andere locatie dan de huidige map, kunnen we een doelmap specificeren met de -C (gespecificeerde directory) optie.
tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/
Als we in onze map Documents / Songs kijken, zien we dat de directory Guitar Songs is gemaakt.

Merk op dat de doelmap al moet bestaan, tar zal het niet maken als het niet aanwezig is. Als u een directory moet maken en tar pak de bestanden allemaal in één opdracht uit, je kunt dat als volgt doen:
mkdir -p ~/Documents/Songs/Downloaded && tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/Downloaded/
De -p (ouders) optie oorzaken mkdir om eventuele bovenliggende mappen te maken die vereist zijn, waarbij u ervoor zorgt dat de doelmap wordt gemaakt.
In Tar-bestanden kijken voordat u ze uitpakt
Tot dusver hebben we net een sprong in het diepe genomen en de bestanden ongezien eruit gehaald. Misschien wil je kijken voordat je springt. U kunt de inhoud van een tar bestand voordat u het uitpakt met behulp van de -t (lijst) optie. Het is meestal handig om de uitvoer via de less opdracht.
tar -tf ukulele_songs.tar.gz | less
Merk op dat we de -z optie om de bestanden weer te geven. We hoeven alleen de -z optie als we zijn extraheren bestanden van een .tar.gz het dossier. Evenzo hebben we de -j optie om de bestanden in een tar.bz2 het dossier.

Als we door de uitvoer scrollen, kunnen we zien dat alles in het tar-bestand wordt bewaard in een map genaamd Ukulele Songs, en binnen die map zijn er bestanden en andere mappen.

We kunnen zien dat de directory Ukulele Songs directories bevat genaamd Random Songs, Ramones en Possibles.
Gebruik de volgende opdracht om alle bestanden uit een map in een tar-bestand te extraheren. Merk op dat het pad tussen aanhalingstekens staat, omdat er spaties in het pad staan.
tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/Ramones/"

Om een enkel bestand uit te pakken, geeft u het pad en de naam van het bestand op.
tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/023 - My Babe.odt"

U kunt een selectie van bestanden extraheren met behulp van jokertekens, where * staat voor een willekeurige reeks tekens en ? staat voor een enkel teken. Het gebruik van jokertekens vereist het gebruik van de --wildcards optie.
tar -xvz --wildcards -f ukulele_songs.tar.gz "Ukulele Songs/Possibles/B*"

Bestanden uitpakken zonder mappen uit te pakken
Als u niet wilt dat de directorystructuur in het tar-bestand opnieuw wordt aangemaakt op uw harde schijf, gebruikt u de --strip-components optie. De --strip-components optie vereist een numerieke parameter. Het getal geeft aan hoeveel niveaus van mappen moeten worden genegeerd. Bestanden uit de genegeerde mappen worden nog steeds uitgepakt, maar de mapstructuur wordt niet op uw harde schijf gerepliceerd.
Als we specificeren --strip-components=1 met ons voorbeeld tar-bestand, wordt de bovenste directory van de Ukulele Songs in het tar-bestand niet op de harde schijf gemaakt. De bestanden en mappen die naar die map zouden zijn uitgepakt, worden uitgepakt in de doelmap.
tar -xvzf ukulele_songs.tar.gz --strip-components=1

Er zijn slechts twee niveaus voor het nesten van mappen in ons tar-voorbeeldbestand. Dus als we gebruiken --strip-components=2, worden alle bestanden uitgepakt in de doelmap en worden er geen andere mappen gemaakt.
tar -xvzf ukulele_songs.tar.gz --strip-components=2

Als je naar de Linux man-pagina kijkt, zie je dat tar moet een goede kandidaat zijn voor de titel “commando met de meeste opdrachtregelopties.” Gelukkig, zodat we bestanden kunnen extraheren uit .tar.gz en tar.bz2 bestanden met een goede mate van granulaire controle, hoeven we slechts een handvol van deze opties te onthouden.