Dateien mit tar archivieren und komprimieren
Lerne, wie du mit tar Dateien und Verzeichnisse archivierst, Archive prüfst, gzip oder bzip2 verwendest und Inhalte sicher wieder entpackst.
tar ist ein Linux-Kommandozeilenprogramm, mit dem du mehrere Dateien und Verzeichnisse in einer einzigen Archivdatei bündeln kannst. Diese Anleitung zeigt das Erstellen, Prüfen, Komprimieren, Entpacken und Zusammenführen von Tar-Archiven.
Grundkenntnisse im Terminal, mit cd, ls sowie relativen und absoluten Pfaden sind hilfreich. Eine Einführung findest du unter Einführung in Linux.
Grundlagen von tar
Der Name tar ist eine Abkürzung für Tape Archiver. Das Programm wurde ursprünglich entwickelt, um Dateien für Bandarchive zusammenzufassen. Heute wird es vor allem für Sicherungen, Quellcodepakete und den Austausch vieler Dateien verwendet.
Ein Archiv ist eine Containerdatei. Sie kann mehrere Dateien, Verzeichnisse und die zugehörige Verzeichnisstruktur enthalten. Ein Tar-Archiv bündelt diese Inhalte, ohne sie automatisch zu komprimieren.
Das ist der wichtige Unterschied:
- Archivieren bedeutet, mehrere Dateien und Verzeichnisse in einer Datei zusammenzufassen.
- Komprimieren bedeutet, die benötigte Datenmenge durch ein Kompressionsverfahren zu verringern.
Eine Datei mit der Endung .tar ist normalerweise ein unkomprimiertes Tar-Archiv. Die Bezeichnung Tarball wird allgemein für ein Tar-Archiv verwendet, besonders für komprimierte Varianten wie .tar.gz.
Aufbau eines tar-Befehls
Eine typische Syntax lautet:
tar AKTION OPTIONEN -f ARCHIVDATEI QUELLEN
Die Aktion bestimmt, was tar tun soll. Häufige Aktionen sind Erstellen mit -c, Auflisten mit -t, Extrahieren mit -x und Anhängen mit -A.
Die Option -f legt die Archivdatei fest. Der Archivname folgt direkt auf -f, wenn die Optionen mit Bindestrichen geschrieben werden:
tar -cf archiv.tar datei1.txt datei2.txt
Mehrere kurze Optionen lassen sich kombinieren. Daher sind beispielsweise -cvf und -czf üblich. Bei -f ist der nächste Wert der Archivname; die Reihenfolge sollte deshalb eindeutig bleiben. Die Schreibweise ohne führenden Bindestrich, etwa tar cvf archiv.tar verzeichnis/, wird von vielen tar-Versionen ebenfalls unterstützt, die Schreibweise mit Bindestrich ist jedoch leichter zu lesen.
Relative Pfade beziehen sich auf das aktuelle Arbeitsverzeichnis. Absolute Pfade beginnen mit / und verweisen unabhängig vom aktuellen Verzeichnis auf einen festen Ort. Für portable Archive sind relative Pfade meist besser geeignet.
Wichtige tar-Optionen
Archive erstellen
Mehrere Dateien archivieren
Mit -c erzeugst du ein neues Archiv. Die Option -f gibt dessen Namen an:
tar -cf archive.tar results.txt sample_text
Die beiden angegebenen Quellen werden in archive.tar zusammengefasst. Das ursprüngliche Verzeichnis und die Quelldateien bleiben dabei unverändert.
Ein ganzes Verzeichnis archivieren
tar -cvf projekt.tar projekt/
Das Verzeichnis projekt/ und sein gesamter Inhalt werden archiviert. Durch -v gibt tar jeden verarbeiteten Pfad aus. Das ist nützlich, um den Fortschritt zu sehen, kann bei sehr vielen Dateien aber eine große Ausgabe erzeugen.
Erfolg kontrollieren
Prüfe zunächst, ob die Archivdatei angelegt wurde:
ls -lh projekt.tar
Danach kannst du die enthaltenen Pfade anzeigen:
tar -tf projekt.tar
Die Option -t liest das Archiv, extrahiert aber keine Dateien.
Komprimierte Tar-Archive
tar selbst ist in erster Linie ein Archivierungsprogramm. Ein normales .tar-Archiv bündelt Daten, verkleinert sie aber nicht automatisch. Für die Kompression arbeitet tar mit Verfahren wie gzip oder bzip2 zusammen.
gzip verwenden
Mit -z wird gzip beim Erstellen oder Lesen aktiviert:
tar -czf archive.tar.gz results.txt sample.txt
Die Kurzform .tgz bezeichnet ebenfalls ein gzip-komprimiertes Tar-Archiv:
tar -czf compress.tgz results.txt sample.txt
bzip2 verwenden
Für bzip2 wird üblicherweise -j verwendet:
tar -cjf archive.tar.bz2 results.txt sample.txt
Die Kompressionsmethode muss beim Lesen zur tatsächlichen Datei passen. Die Endung ist eine wichtige Orientierung, ersetzt aber keine Prüfung des Dateiformats.
Archive untersuchen
Zeige den Inhalt möglichst vor dem Entpacken an. Für ein unkomprimiertes Archiv verwendest du:
tar -tf archive.tar
Für ein gzip-Archiv lautet der Befehl:
tar -tzf archive.tar.gz
Bei bzip2 verwendest du:
tar -tjf archive.tar.bz2
Die Ausgabe zeigt die im Archiv gespeicherten Pfade. So erkennst du, ob die Dateien direkt im aktuellen Verzeichnis oder innerhalb eines zusätzlichen Unterverzeichnisses landen werden.
Archive entpacken
In das aktuelle Verzeichnis extrahieren
Ein unkomprimiertes Archiv wird mit -x entpackt:
tar -xf archive.tar
Ein gzip-komprimiertes Archiv wird so extrahiert:
tar -xzf archive.tar.gz
Für bzip2 lautet der Befehl:
tar -xjf archive.tar.bz2
Ein bestimmtes Zielverzeichnis verwenden
Mit -C bestimmst du, in welches bereits vorhandene Verzeichnis tar extrahiert:
tar -xf archive.tar -C /tmp/wiederherstellung
Das Zielverzeichnis muss in der Regel vorher existieren:
mkdir -p /tmp/wiederherstellung
tar -xzf archive.tar.gz -C /tmp/wiederherstellung
Ein absoluter Zielpfad wie /tmp/wiederherstellung macht den Zielort eindeutig. Alternativ kannst du ein relatives Zielverzeichnis verwenden, etwa ./entpackt.
Nur einzelne Dateien extrahieren
Hinter dem Archivnamen kannst du einen oder mehrere im Archiv gespeicherte Pfade angeben:
tar -xf archive.tar results.txt
Nur der Eintrag results.txt wird extrahiert. Der angegebene Name muss zur Schreibweise im Archiv passen. Prüfe ihn daher vorher mit tar -tf. Bei einem Archiv, das beispielsweise projekt/results.txt enthält, musst du genau diesen Pfad angeben:
tar -xf projekt.tar projekt/results.txt
Tar-Archive zusammenführen
Die Option -A hängt die Einträge eines Tar-Archivs an ein anderes Tar-Archiv an. Sie ist für unkomprimierte Tar-Dateien gedacht:
tar -Af basis.tar nachtrag.tar
Danach enthält basis.tar zusätzlich die Einträge aus nachtrag.tar. Kontrolliere das Ergebnis:
tar -tf basis.tar
Sicherer Umgang mit Pfaden und Dateien
Dateinamen mit Leerzeichen
Setze Dateinamen mit Leerzeichen in Anführungszeichen oder maskiere die Leerzeichen mit einem Backslash:
tar -cf dokumente.tar "Bericht Januar.txt" "Notizen Projekt.txt"
Ohne Anführungszeichen würde die Shell einen Namen mit Leerzeichen in mehrere Argumente aufteilen.
Vor dem Entpacken prüfen
Archive aus nicht vertrauenswürdigen Quellen können unerwartete Pfade enthalten. Dazu gehören beispielsweise absolute Pfade oder Pfade mit ../, die auf Bereiche außerhalb des gewünschten Zielverzeichnisses zeigen können.
- Liste den Inhalt mit
tar -tf,tar -tzfodertar -tjfauf. - Achte auf absolute Pfade und ungewöhnliche Verzeichnisnamen.
- Extrahiere zunächst in ein leeres, ausdrücklich gewähltes Verzeichnis.
- Prüfe die entpackten Dateien, bevor du sie in ein produktives Verzeichnis verschiebst.
Vermeide beim Erstellen unnötige absolute Quellpfade. Wechsle stattdessen in das passende übergeordnete Verzeichnis und archiviere mit relativen Pfaden:
cd /home/alex
tar -czf projekt.tar projekt/
Dadurch enthält das Archiv projekt/ statt eines vollständigen, systemabhängigen Pfads wie /home/alex/projekt/.
Bestehende Dateien schützen
Beim Entpacken können Dateien im Zielverzeichnis ersetzt werden, wenn gleichnamige Einträge im Archiv vorhanden sind. Ein leeres Zielverzeichnis reduziert dieses Risiko:
mkdir -p /tmp/test-entpacken
tar -xzf projekt.tar.gz -C /tmp/test-entpacken
Wenn vorhandene Dateien keinesfalls überschrieben werden dürfen, prüfe die Schutzoptionen der installierten tar-Version mit man tar. Die verfügbaren Optionen unterscheiden sich je nach Implementierung und Version.
Typische Fehler und Lösungen
Archiv kann nicht geöffnet oder gefunden werden
Prüfe das aktuelle Arbeitsverzeichnis und den Dateinamen:
pwd
ls -lh
tar -tf archive.tar
Häufig liegt das Archiv in einem anderen Verzeichnis oder der Name nach -f wurde falsch geschrieben. Verwende bei Bedarf einen korrekten relativen oder absoluten Pfad.
Formatfehler bei einem .tar.gz-Archiv
Bei einem gzip-Archiv muss -z verwendet werden:
tar -tzf archive.tar.gz
Wenn dieser Test fehlschlägt, können die Endung und das tatsächliche Format nicht übereinstimmen oder das Archiv kann beschädigt beziehungsweise unvollständig sein. Prüfe außerdem, ob die Datei vollständig übertragen wurde.
Dateien landen an einem unerwarteten Ort
Der aktuelle Verzeichniswechsel und die im Archiv gespeicherten Pfade bestimmen den Zielort. Zeige zuerst den Inhalt an und nutze anschließend -C:
tar -tf archive.tar
tar -xf archive.tar -C /tmp/wiederherstellung
Zusammenführen mit -A funktioniert nicht
Prüfe, ob beide Dateien unkomprimierte Tar-Archive sind. Komprimierte Archive können nicht einfach als Tar-Daten aneinandergehängt werden. Verwende für -A beispielsweise basis.tar und nachtrag.tar ohne Kompressionsschicht.
Praktische Befehlsübersicht
tar -cf archive.tar DATEI...
tar -cvf archive.tar VERZEICHNIS/
tar -czf archive.tar.gz DATEI...
tar -cjf archive.tar.bz2 DATEI...
tar -tf archive.tar
tar -tzf archive.tar.gz
tar -xf archive.tar
tar -xzf archive.tar.gz
tar -xjf archive.tar.bz2
tar -xf archive.tar -C ZIELVERZEICHNIS
tar -xf archive.tar PFAD/IM/ARCHIV
tar -Af ZIELARCHIV.tar QUELLARCHIV.tar
Zusammenfassung
tarbündelt Dateien und Verzeichnisse, komprimiert ein normales.tar-Archiv aber nicht.-cerstellt,-tlistet auf und-xextrahiert.-fbestimmt die Archivdatei;-vzeigt die verarbeiteten Pfade an.-zsteht für gzip,-jfür bzip2.- Mit
-Clegst du beim Erstellen oder Entpacken ein Verzeichnis fest. - Prüfe fremde Archive vor dem Entpacken und verwende möglichst relative Pfade.
Für verwandte Archivierungsaufgaben eignet sich auch die Anleitung Dateien mit cpio archivieren. Grundlagen zum Arbeiten mit Dateien findest du unter Arbeiten mit Dateien und zum Umgang mit Verzeichnissen unter Arbeiten mit Verzeichnissen.