So extrahieren Sie Dateien aus einer .tar.gz- oder .tar.bz2-Datei unter Linux

Tar-Archive sind komprimierte Container für Dateien. Besonders bei der Verwendung von Linux-Distributionen wie Ubuntu oder im Terminal von macOS sind sie allgegenwärtig. Hier erfahren Sie, wie Sie den Inhalt einer Tar-Datei, auch bekannt als Tarball, extrahieren – oder wie man umgangssprachlich sagt, entpacken.

Was bedeuten .tar.gz und .tar.bz2?

Dateien, die die Endung .tar.gz oder .tar.bz2 tragen, sind komprimierte Archivdateien. Eine Datei, die lediglich die Endung .tar besitzt, ist unkomprimiert, jedoch sind solche Dateien heutzutage eher selten anzutreffen.

Der Bestandteil „.tar“ der Dateiendung steht für Tape Archive und erklärt, warum diese Dateitypen als Tar-Dateien bekannt sind. Die Geschichte der Tar-Dateien reicht bis ins Jahr 1979 zurück, als der Befehl „tar“ entwickelt wurde, um Systemadministratoren das Archivieren von Daten auf Bändern zu ermöglichen. Auch vier Jahrzehnte später nutzen wir noch immer den „tar“-Befehl, um Tar-Dateien auf unseren Festplatten zu extrahieren. Es gibt bestimmt noch jemanden, der Tar-Dateien tatsächlich mit Bändern verwendet.

Das Suffix „.gz“ oder „.bz2“ am Ende einer Dateierweiterung signalisiert, dass das Archiv mit dem Kompressionsalgorithmus gzip bzw. bzip2 komprimiert wurde. Der „tar“-Befehl kann problemlos mit beiden Dateitypen arbeiten, sodass die verwendete Kompressionsmethode keine Rolle spielt. Er sollte auch überall dort verfügbar sein, wo Sie eine Bash-Shell verwenden. Es müssen lediglich die korrekten Optionen für die „tar“-Befehlszeile verwendet werden.

Dateien aus Tar-Archiven extrahieren

Nehmen wir an, Sie haben zwei Notendateien heruntergeladen. Eine Datei trägt den Namen „ukulele_songs.tar.gz“ und die andere „guitar_songs.tar.bz2“. Diese Dateien befinden sich im Ordner „Downloads“.

Lassen Sie uns zuerst die Ukulele-Songs entpacken:

tar -xvzf ukulele_songs.tar.gz

Während die Dateien entpackt werden, werden sie im Terminalfenster aufgelistet.

Die verwendeten Befehlszeilenoptionen sind wie folgt:

-x: Extrahiert, holt die Dateien aus der Tar-Datei.
-v: Ausführlich, listet die Dateien während der Extraktion auf.
-z: Gzip, verwendet gzip zur Dekomprimierung der Tar-Datei.
-f: Datei, der Name der Tar-Datei, mit der der „tar“-Befehl arbeiten soll. Dieser Option muss der Name der Tar-Datei folgen.

Wenn Sie die Dateien im Verzeichnis mit „ls“ auflisten, werden Sie feststellen, dass ein Ordner mit dem Namen „Ukulele Songs“ erstellt wurde. Die entpackten Dateien befinden sich in diesem Ordner. Woher kommt dieser Ordner? Er war in der Tar-Datei enthalten und wurde zusammen mit den Dateien extrahiert.

Nun entpacken wir die Gitarrensongs. Dazu verwenden wir beinahe den gleichen Befehl wie zuvor, jedoch mit einer entscheidenden Änderung. Die Endung „.bz2“ zeigt uns, dass die Datei mit dem Befehl bzip2 komprimiert wurde. Anstelle der Option „-z“ (gzip) verwenden wir die Option „-j“ (bzip2).

tar -xvjf guitar_songs.tar.bz2

Auch hier werden die Dateien beim Entpacken im Terminal aufgelistet. Um es klarzustellen, die von uns für die .tar.bz2-Datei verwendeten Befehlszeilenoptionen waren:

-x: Extrahiert, holt die Dateien aus der Tar-Datei.
-v: Ausführlich, listet die Dateien während der Extraktion auf.
-j: Bzip2, verwendet bzip2 zur Dekomprimierung der Tar-Datei.
-f: Datei, der Name der Tar-Datei, mit der der „tar“-Befehl arbeiten soll.

Wenn wir die Dateien im Ordner „Downloads“ auflisten, werden wir sehen, dass ein weiterer Ordner namens „Guitar Songs“ erstellt wurde.

Auswählen, wohin die Dateien extrahiert werden sollen

Wenn wir die Dateien an einen anderen Speicherort als das aktuelle Verzeichnis extrahieren möchten, können wir mit der Option „-C“ (angegebenes Verzeichnis) ein Zielverzeichnis angeben.

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

In unserem Ordner „Documents/Songs“ sehen wir, dass der Ordner „Guitar Songs“ erstellt wurde.

Beachten Sie, dass das Zielverzeichnis bereits existieren muss. „tar“ wird es nicht erstellen, wenn es nicht vorhanden ist. Wenn Sie ein Verzeichnis erstellen und die Dateien von „tar“ in einem einzigen Befehl hinein entpacken müssen, können Sie dies wie folgt bewerkstelligen:

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

Die Option „-p“ (parents) veranlasst „mkdir“, alle erforderlichen übergeordneten Verzeichnisse zu erstellen, um sicherzustellen, dass das Zielverzeichnis erstellt wird.

In Tar-Dateien hineinschauen, bevor Sie sie entpacken

Bisher haben wir einfach darauf vertraut und die Dateien ungeprüft extrahiert. Vielleicht möchten Sie aber einen Blick hineinwerfen, bevor Sie sie extrahieren. Sie können den Inhalt einer Tar-Datei überprüfen, bevor Sie sie entpacken, indem Sie die Option „-t“ (Liste) verwenden. In der Regel ist es praktisch, die Ausgabe über den Befehl „less“ zu leiten.

tar -tf ukulele_songs.tar.gz | less

Beachten Sie, dass wir die Option „-z“ nicht benötigen, um die Dateien aufzulisten. Wir müssen die Option „-z“ nur hinzufügen, wenn wir Dateien aus einer .tar.gz-Datei extrahieren. Ebenso benötigen wir die Option „-j“ nicht, um die Dateien in einer tar.bz2-Datei aufzulisten.

Wenn wir durch die Ausgabe scrollen, können wir erkennen, dass sich alles in der Tar-Datei in einem Verzeichnis namens „Ukulele Songs“ befindet und dass sich in diesem Ordner Dateien und andere Ordner befinden.

Wir können sehen, dass der Ordner „Ukulele Songs“ die Ordner „Random Songs“, „Ramones“ und „Possibles“ enthält.

Um alle Dateien aus einem bestimmten Ordner innerhalb einer Tar-Datei zu extrahieren, verwenden Sie den folgenden Befehl. Beachten Sie, dass der Pfad in Anführungszeichen stehen muss, da der Pfad Leerzeichen enthält.

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

Um eine einzelne Datei zu extrahieren, geben Sie den Pfad und den Dateinamen an.

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

Sie können eine Auswahl von Dateien mithilfe von Platzhaltern extrahieren, wobei „*“ für eine beliebige Zeichenfolge und „?“ für ein beliebiges einzelnes Zeichen steht. Die Verwendung von Platzhaltern erfordert die Verwendung der Option „–wildcards“.

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

Dateien extrahieren, ohne Ordner zu extrahieren

Wenn Sie nicht möchten, dass die Ordnerstruktur aus der Tar-Datei auf Ihrer Festplatte wiederhergestellt wird, verwenden Sie die Option „–strip-components“. Die Option „–strip-components“ benötigt einen numerischen Parameter. Die Zahl gibt an, wie viele Ordner-Ebenen ignoriert werden sollen. Dateien aus den ignorierten Ordnern werden weiterhin extrahiert, die Ordnerstruktur jedoch nicht auf Ihrer Festplatte nachgebildet.

Wenn wir „–strip-components=1“ mit unserer Beispiel-Tar-Datei angeben, wird der oberste Ordner „Ukulele Songs“ innerhalb der TAR-Datei nicht auf der Festplatte erstellt. Die Dateien und Ordner, die in diesen Ordner entpackt worden wären, werden direkt in das Zielverzeichnis extrahiert.

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

In unserer Beispiel-Tar-Datei gibt es nur zwei Ebenen der Ordnerverschachtelung. Wenn wir also „–strip-components=2“ verwenden, werden alle Dateien in das Zielverzeichnis extrahiert und keine zusätzlichen Ordner erstellt.

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

Wenn man sich die Linux Man-Page ansieht, wird deutlich, dass „tar“ ein ernsthafter Anwärter auf den Titel „Befehl mit den meisten Befehlszeilenoptionen“ sein muss. Glücklicherweise müssen wir uns nur eine Handvoll dieser Optionen merken, um Dateien aus .tar.gz- und .tar.bz2-Dateien mit einem guten Maß an detaillierter Kontrolle extrahieren zu können.