Suche in Archiven

Bei Archiven hilft meist nur ein Abgleich der Inhalte mit einem Muster weiter, besonders, wenn Sie weder den genauen Namen noch das Änderungsdatum der gesuchten Datei kennen. Die Tar-Optionen --to-stdout beziehungsweise -O leiten den Inhalt einer Datei auf die Standardausgabe. Über eine Pipe filtern Sie dann den Datenstrom ganz leicht mittels Grep (Listing 8).

Listing 8

$ tar -xOvf archiv.tar | grep -F suchstring

Tar verarbeitet das Archiv dabei Datei für Datei. Die Option -v bewirkt, dass das Programm Daten über zwei Kanäle ausgibt – der Inhalt landet in der Standardausgabe (stdout), die Dateinamen auf der Standardfehlerausgabe (stderr). Ein Terminal führt beide Kanäle zusammen, sodass die Zeilen jeweils nacheinander erscheinen. Ohne die Option -v erfolgt keine Ausgabe der Dateinamen über die Standardfehlerausgabe.

Das Suchergebnis besteht aus einer Liste von Dateinamen aus dem Tar-Archiv und den Treffern. Ein Zuordnen zwischen Dateiname und Treffer findet nicht statt (Abbildung 4). Für ein verständlicheres Suchergebnis braucht es einen etwas tieferen Griff in die Trickkiste der Abteilung Shell-Programmierung, wie Listing 9 zeigt.

Abbildung 4: Dateiliste und Suchtreffer mischen sich bei der Suche nach Dateiinhalten aus Tar-Archiven.

Listing 9

for datei in $(tar -tf archiv.tar);
  do
    suchtreffer=$(tar -xOf archiv.tar "$datei" | grep -F suchstring) && echo "$datei:";
    echo "$suchtreffer" | grep --color -F suchstring;
    echo "";
  done

Die Ausgabe des ersten Tar-Kommandos – die Liste der Dateien im Archiv – landet in der Variable datei. Dabei teilt die Shell die Ausgabe an den Leerzeichen. Dateinamen, die solche enthalten, führen zu Fehlern beim nachfolgenden Verarbeiten innerhalb der Schleife. Diese arbeitet sich schrittweise durch die einzelnen Werte.

Bei jedem Schleifendurchlauf erfolgt ein Mustervergleich und dessen Auswertung. Dazu speichert das Skript zuerst in der Variable suchtreffer das Ergebnis des Tar/Grep-Kommandos, wobei der Tar-Befehl nur die Datei aus dem Archiv auspackt und den Inhalt ausgibt. Eine Pipe leitet den Datenstrom weiter zum Filtern an Grep.

Im nächsten Schrritt nutzt das Skript den Rückgabewert des grep-Kommandos aus. Falls grep einen Suchtreffer gelandet hat, liefert es als Rückgabewert den Wert 0. Der Operator && sorgt dafür, dass das Skript diesen Wert evaluiert und die nachfolgenden echo-Befehle nur ausführt, falls Grep die als Rückgabewert 0 meldet ("erfolgreich ausgeführt und mit Treffer").

Als Ausgabe erscheinen der Dateiname und die Zeile mit dem farbig hervorgehobenen Suchtreffer. Die Werte finden sich in den beiden Variablen datei und suchtreffer, deren Inhalt auf der Standardausgabe landet. Das Semikolon zwischen den echo-Befehlen bewirkt einen Zeilenumbruch, der letzte echo-Aufruf eine Leerzeile zwischen den Ausgaben, was für etwas mehr Lesbarkeit sorgt (Abbildung 5).

Abbildung 5: Suchtreffer und zugeordnete Dateien im Überblick.

In den Beispielen bestünde die Möglichkeit, die Befehl grep -F durch eine Mustersuche mit grep -E in Kombination mit einem regulären Ausdruck auszutauschen – je nachdem, wie umfangreich und flexibel die Recherche ausfällt. Das beschriebene Vorgehen funktioniert auch bei komprimierten Tar-Archiven. Dazu geben Sie in den Aufrufen die entsprechende Option für das Komprimierungsformat an, beispielsweise -z für Gzip-komprimimierte Dateien.

Kombinationen

Für Rar- und 7zip-Archive existiert keine spezifische Grep-Version. Hier hilft es wieder, zwei Befehle miteinander zu kombinieren: unrar beziehungsweise 7z einerseits und grep andererseits. Bei Unrar nutzen Sie die Option p für "print". Damit weisen Sie das Programm an, den Inhalt der aus dem Archiv entpackten Dateien auf die Standardausgabe auszugeben. Bei 7zip sind es zwei Optionen: Mit -e extrahieren Sie die Dateien, und über -so erfolgt die Ausgabe. Über eine Pipe filtern Sie dann mittels Grep die Daten (Listing 10).

Listing 10

$ unrar p archiv.rar | grep --color -E "[Pp]reis.*pdf"
$ 7z e archiv.7z -so | grep --color -E "[Pp]reis.*pdf"

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Related content

  • Zu Befehl: Suchen mit grep, egrep, fgrep, (b)zgrep
    Für die Suche nach Wörtern und Ausdrücken in Textdateien bieten sich die Kommandos der grep-Familie an. Als Ergebnis zeigen sie wahlweise die gefundenen Zeilen, die Namen der Dateien, in denen das Suchmuster vorkommt, oder die Anzahl der Treffer an.
  • Zu Befehl
    Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, wo es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.
  • Dichter dran
    Gzip und Bzip2 komprimieren nicht nur Daten, sondern liefern auch kleine, feine Tools zum Betrachten, Durchsuchen und Vergleichen komprimierter Textdateien mit.
  • gzip, bzip2 und tar
    Archivierungsprogramme gibt es wie Sand am Meer; die schnellsten Vertreter ihrer Art nutzen Sie auf der Kommandozeile: Mit kurzen Befehlen packen Sie Ihre Daten zusammen und wieder aus oder archivieren ganze Verzeichnishierarchien.
  • Gut verpackt
    Archivierungsprogramme gibt es wie Sand am Meer; die schnellsten Vertreter ihrer Art nutzen Sie auf der Kommandozeile: Mit kurzen Befehlen packen Sie Ihre Daten zusammen und wieder aus oder archivieren ganze Verzeichnishierarchien.
Kommentare

Infos zur Publikation

title_2014_08

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 0 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...
Öhm - wozu Benutzername, wenn man dann hier mit Klarnamen angezeigt wird?
Thomas Kallay, 03.07.2014 20:30, 1 Antworten
Hallo Team von Linux-Community, kleine Zwischenfrage: warum muß man beim Registrieren einen Us...
openSUSE 13.1 - Login-Problem wg. Fehler im Intel-Grafiktreiber?
Thomas Kallay, 03.07.2014 20:26, 8 Antworten
Hallo Linux-Community, habe hier ein sogenanntes Hybrid-Notebook laufen, mit einer Intel-HD460...
Fernwartung für Linux?
Alfred Böllmann, 20.06.2014 15:30, 7 Antworten
Hi liebe Linux-Freunde, bin beim klassischen Probleme googeln auf www.expertiger.de gestoßen, ei...