Aus LinuxUser 04/2012

Suche in komprimierten Dateien und Archiven

© Supajem, sxc.hu

Nadel im Datenhaufen

Über die Kommandozeile flink in komprimierten Dateien und Archiven zu suchen, spart viel Zeit. Die richtigen Tools dazu bringt praktisch jedes Linux-System von Haus aus mit.

Um Platz für aktuell nicht mehr benötigte Daten zu schaffen, bietet es sich an, einzelne Dateien zu komprimieren oder diese zu einem komprimierten Archiv zusammenzufassen (siehe Kasten „Komprimierte Datei versus Archiv“). Das Sichern erfolgt danach meist auf einem externen Medium, beispielsweise auf einer DVD, einer weiteren Festplatte oder einem Server im Rechenzentrum.

Komprimierte Datei versus Archiv

Die in diesem Artikel vorgestellten Programme fallen in einigen Fällen in eine der beiden Kategorien Datenkompression und Erzeugen von Archiven, andere kombinieren beides. Zur ersten Kategorie zählen die Tools XZ, Gzip und Bzip2; die zweiten Kategorie besetzt Tar. Zip, 7-zip und Rar verbinden beide Techniken.

Um die mit Gzip, Bzip2 und XZ komprimierten Tar-Archive zu verarbeiten, müssen die Komprimierungsprogramme als Helfer installiert sein. Tar ruft diese direkt auf. Generell erkennen Sie leicht an der Dateiendung, um welche Art von Archiv oder Kompression es sich handelt. Die Tabelle „Dateiendungen“ gibt Aufschluss über gängige Formate.

7-zip erweist sich als Spezialfall: Dateien dieses Typs haben üblicherweise die Endung .7z. Die passenden Tools dazu heißen 7z, 7za und 7zr. Der Unterschied liegt darin, welche Formate (zum Teil inklusive Gzip, Bzip2, XZ, LZMA, Rar oder Zip) das Programm beherrscht. Die Namen der Pakete unter Debian und Ubuntu sind p7zip (7zr), p7zip-full (7z, 7za) und p7zip-rar (Rar-Plugin für 7z).

Dateiendungen

Typ Endung
Komprimierte Dateien
Gzip .gz
Bzip2 .bz2
XZ .xz
Archive
Zip .zip
7zip .7z
Rar .rar
Tar .tar
Tar+Gzip .tar.gz
Tar+Bzip2 .tar.bz2
Tar+XZ .tar.xz

Erst zu einem späteren Zeitpunkt taucht meist die spannende Frage auf, wie Sie etwas in diesen komprimierten Dateien und Archiven wiederfinden. Meist kommen einem nur noch Fragmente in den Sinn – ein Teil des Dateinamens, der ungefähre Zeitraum der letzten Bearbeitung oder ein Ausschnitt des Inhalts.

Um die Datei oder das Archiv einfach auszupacken, helfen die Kommandos aus der Tabelle „Archive entpacken“. Danach prüfen Sie, ob die gewünschten Inhalte vorliegen. Dieses Vorgehen erweist sich bei kleinen Datenmengen durchaus als praktikabel.

Bei größeren Datenmengen stößt es aber schnell an seine Grenzen, beispielsweise, wenn für die ausgepackten Daten nicht genügend Speicherplatz bereitsteht. Deshalb haben findige Entwickler einfachere und effizientere Wege zum Durchsuchen der Archive ersonnen.

Archive entpacken

Typ Kommando
Komprimierte Dateien
Gzip gunzip Datei.gz, unp Datei.gz
Bzip2 bunzip2 Datei.bz2, unp Datei.bz2
XZ unxz Datei.xz, unp Datei.xz
Archive
Zip unzip Archiv.zip, unp Archiv.zip
7zip 7z e Archiv.7z, unp Archiv.7z
Rar unrar e Archiv.rar, unp Archiv.rar
Tar tar -xf Archiv.tar, unp Archiv.tar
Tar+Gzip tar -xzf Archiv.tar.gz, unp Archiv.tar.gz
Tar+Bzip2 tar -xjf Archiv.tar.bz2, unp Archiv.tar.bz2
Tar+XZ tar -xJf Archiv.tar.xz, unp Archiv.tar.xz

Ohne Auspacken

Im Fall einer komprimierten Datei entspricht der Dateiname in der Regel dem Namen der gepackten Datei. Ein Archiv dagegen fasst unter einem eigenen Dateinamen mehrere Dateien zusammen. Die einzelnen Programme bieten jedoch eine Option, über die Sie die Liste im Archiv ausgeben. Mit den Kommandos aus Tabelle „Inhalt auflisten“ durchsuchen Sie das Archiv nur nach Dateinamen und packen es nicht auf den Datenträger aus.

Inhalt auflisten

Typ Kommando
Komprimierte Dateien
Gzip gzip -l Datei.gz
Bzip2 keine Option
XZ xz -l Datei.xz
Archive
Zip unzip -l Archiv.zip
7zip 7z l Archiv.7z
Rar unrar l Archiv.rar
Tar tar -tf Archiv.tar
Tar+Gzip tar -tzf Archiv.tar.gz
Tar+Bzip2 tar -tjf Archiv.tar.bz2
Tar+XZ tar -tJf Archiv.tar.xz

Die Dateiliste des Archivs filtern Sie bei Bedarf mit einem Grep-Kommando, indem Sie den gewünschten Namen als Muster verwenden. Beide Kommandos verbinden Sie dazu über eine Pipe miteinander. Die ausgegebene Dateiliste beinhaltet in jeder Zeile nur einen Dateinamen. Daher gibt das Grep-Kommando nur die Zeilen zurück, auf die das Suchmuster des Dateinamens passt. Drei Varianten von Grep helfen dabei [1]:

  • grep -F (alternativ: fgrep oder grep --fixed-strings): Mit diesem Aufruf extrahieren Sie ausschließlich exakte Vorkommen einer Zeichenkette im Datenstrom. Sonderzeichen ignoriert das Tool.
  • grep -G (alternativ: grep --basic-regexp): Grep ohne Auswahl des Suchmuster-Typs nutzt eine einfachere Variante von regulären Ausdrücken und nimmt das Suchmuster dementsprechend nicht so wortwörtlich wie Fgrep. Es interpretiert verschiedene Sonderzeichen (Wildcards), beispielsweise * als Ausdruck für beliebig viele beliebige Zeichen. Diese einfachen regulären Ausdrücke sind ähnlich (aber nicht identisch) zu den Wildcards, die Sie in der Shell zum Auswählen von Dateien nutzen.
  • egrep (alternativ: grep -E oder grep --extended-regexp): Die „extended regular expressions“, also erweiterte reguläre Ausdrücke, entsprechen in etwa den Suchmustern in anderen Kommandozeilenprogrammen, wie zum Beispiel in Sed und Awk, im Editor Vi und im Betrachter Less.

Grep früher und heute

In Debian-Releases bis zur Version 4.0 („Etch“) waren Fgrep und Egrep Verweise auf Grep. Diese reichten den Aufruf an Grep mit der entsprechenden Option und den Parametern weiter, grep -F für fgrep und grep -E für egrep. Das erfolgte über ein Shell-Skript:

$ cat /bin/fgrep
#!/bin/sh
exec grep -F ${1+"$@"}

Mittlerweile hat sich das geändert: Die Kommandos liegen bei den aktuelleren Debian-Versionen als eigenständige Binaries vor. Scientific Linux und Ubuntu handhaben das ähnlich wie Debian, der Red-Hat/Fedora-Ableger CentOS hingegen nicht. Listing 1 zeigt, dass unter CentOS 5.5 Fgrep und Egrep auf Grep linken – zu erkennen am l in den Benutzerrechten und dem Verweis in der rechten Spalte.

Die beiden Kommandos Fgrep und Egrep sind zudem als veraltet gekennzeichnet (siehe dazu die Manpage der Kommandos) und nur aus historischen Gründen noch in dieser Form enthalten. Es steht daher zu erwarten, dass diese Kommandos in der Zukunft entfallen und es stattdessen Grep mit der entsprechenden Option aufzurufen gilt. Ein genauer Termin für diese doch recht gravierende und umstrittene Änderung steht jedoch noch nicht fest.

Listing 1

$ ls -l $(which egrep fgrep grep)
lrwxrwxrwx 1 root root     4 22. Okt 2010  /bin/egrep -> grep*
lrwxrwxrwx 1 root root     4 22. Okt 2010  /bin/fgrep -> grep*
-rwxr-xr-x 1 root root 85060 26. Sep 2009  /bin/grep*

Für ein tar.gz-Archiv liefert die kurze Befehlsfolge aus Listing 2 erste Treffer. Zuerst durchsucht Tar das angegebene Archiv und schickt das komplette Inhaltsverzeichnis auf die Standardausgabe in eine Pipe. Aus dieser erhält Fgrep die Eingabedaten und filtert diese nach dem angegebenen Muster – hier dem Dateinamen.

Listing 2

$ tar -tzf Archiv.tar.gz | fgrep --color Dateiname
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
KAUFEN
LinuxUser 04/2012 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: