Wie kann ich automatisch doppelt komprimierte Archive entpacken?
- Einleitung
- Die Herausforderung bei doppelt komprimierten Archiven
- Automatisches Entpacken mittels Shell-Skripten
- Beispiel für ein einfaches Bash-Skript
- Alternativen und Werkzeuge
- Fazit
Einleitung
Doppelt komprimierte Archive sind Archive, die innerhalb eines anderen komprimierten Archivs verpackt sind.
Ein typisches Beispiel ist eine Datei, die zuerst als ZIP- oder TAR-Archiv zusammengestellt und anschließend
noch einmal mit einem Kompressionsverfahren wie gzip oder bzip2 komprimiert wurde. Das manuelle Entpacken
solcher Dateien kann umständlich sein, da man Schritt für Schritt vorgehen muss. Mit Automatisierungslösungen
Die Herausforderung bei doppelt komprimierten Archiven
Der Hauptgrund, warum doppelt komprimierte Archive nicht ohne weiteres mit einem einfachen Entpackbefehl extrahiert werden können,
liegt darin, dass erst nach dem Aufbrechen der äußeren Kompression das eigentliche Archiv sichtbar wird. Einbinden von beiden Entpack-Schritten
erfordert eine Erkennung der Dateitypen im jeweiligen Entpackvorgang, um entsprechend das richtige Werkzeug zu verwenden. Da Kompressions- und Archivformate sehr unterschiedlich sind,
ist eine reine automatische Lösung ohne vorherige Typbestimmung schwierig. Deswegen werden in Automatisierungs-Skripten oftmals Programme wie file genutzt, um den Dateityp zu bestimmen,
Automatisches Entpacken mittels Shell-Skripten
Eine bewährte Methode ist die Erstellung eines Shell-Skripts, das rekursiv arbeitet. Ein solches Skript versucht, die Datei in einem Schritt zu entpacken und prüft anschließend,
ob dabei weitere komprimierte Dateien entstanden sind, die ebenfalls behandelt werden müssen. Es kann den Dateityp mit Hilfe des Befehls file ermitteln und daraufhin das passende
Entpackprogramm aufrufen. Wird zum Beispiel eine .tar.gz-Datei eingelesen, so kann das Skript zuerst gunzip ausführen, um die gzip-Komprimierung zu entfernen,
und danach tar -xf, um das Archiv zu öffnen. Falls nach der ersten Entpackung wieder eine komprimierte Datei vorhanden ist, wird der Vorgang erneut gestartet.
Beispiel für ein einfaches Bash-Skript
Ein einfaches Bash-Skript könnte ungefähr so aussehen: Zuerst wird der Dateityp ermittelt. Je nach Ergebnis werden verschiedene Entpackbefehle aufgerufen.
Am Ende wird überprüft, ob die neu entstandenen Dateien ebenfalls entpackt werden müssen. Dabei ist jedoch wichtig, die Endlosschleifen zu vermeiden, falls die Komprimierungsart selten oder unbekannt ist.
#!/bin/bashfunction extract() { local file="$1" local mimetype=$(file --mime-type -b "$file") case "$mimetype" in application/zip) unzip -o "$file" ;; application/gzip) gunzip -k "$file" ;; application/x-bzip2) bunzip2 -k "$file" ;; application/x-tar) tar -xf "$file" ;; *) echo "Unbekannter Typ: $mimetype" return 1 ;; esac}function recursive_extract() { local dir="$1" for f in "$dir"/*; do if ]; then if extract "$f"; then rm "$f" # Ursprungsdatei entfernen, wenn erfolgreich entpackt recursive_extract "$dir" break fi fi done}# Aufruf des Skripts mit Verzeichnis als Parameterrecursive_extract "."Dieses Skript untersucht alle Dateien in einem Verzeichnis, entpackt erkannte Archive und ruft sich anschließend selbst erneut auf, um neu entstandene Archive im Verzeichnis zu verarbeiten.
Dadurch kann es mehrfach verschachtelte Archive nacheinander auspacken, bis keine weiteren komprimierten Dateien mehr vorhanden sind.
Alternativen und Werkzeuge
Neben eigenen Skripten gibt es auch spezialisierte Tools wie 7-Zip unter Windows oder bsdtar unter Linux, die mehrere Archiv- und Kompressionsformate mit einem Befehl handhaben können.
7-Zip z.B. kann häufig in einem Schritt Archive mit mehreren Kompressionsschichten entpacken, wenn man den Befehl 7z x verwendet. Auch grafische Entpacker bieten manchmal die Möglichkeit,
nach dem Entpacken automatisch weitere Archive zu öffnen, erfordern aber meist manuelles Eingreifen.
Fazit
Das automatische Entpacken von doppelt oder mehrfach komprimierten Archiven ist durch eine Kombination aus Dateityperkennung und rekursiven Entpackvorgängen möglich.
Ein selbst geschriebenes Skript, das Schritt für Schritt vorgeht und bei jedem Entpackvorgang überprüft, ob weitere Dateien zu extrahieren sind, bietet eine flexible und effiziente Lösung.
Alternativ bieten leistungsfähige Tools wie 7-Zip eine einfachere Handhabung, die für viele Anwendungsfälle ausreicht.
Egal wie, wichtig ist hierbei immer, die genutzten Werkzeuge gut zu verstehen und im Falle ungewöhnlicher Formate eventuell individuelle Anpassungen vorzunehmen.
