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
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • 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.
  • 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.
  • Verpackungskünstler
    Sparen Sie Platz: Mit einem Archivierungsprogramm fassen Sie mehrere Dateien zu einer einzigen zusammen, und mit einem Komprimierungs-Tool verkleinern Sie das Datenpaket. Wir zeigen, wie Sie zum Verpackungskünstler werden.
  • 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.
Kommentare

Infos zur Publikation

LU 12/2016: Neue Desktops

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

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

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

Aktuelle Fragen

Drucker Epson XP-332 unter ubuntu 14.04 einrichten
Andrea Wagenblast, 30.11.2016 22:07, 2 Antworten
Hallo, habe vergeblich versucht mein Multifunktionsgerät Epson XP-332 als neuen Drucker unter...
Apricity Gnome unter Win 10 via VirtualBox
André Driesel, 30.11.2016 06:28, 2 Antworten
Halo Leute, ich versuche hier schon seit mehreren Tagen Apricity OS Gnome via VirtualBox zum l...
EYE of Gnome
FRank Schubert, 15.11.2016 20:06, 2 Antworten
Hallo, EOG öffnet Fotos nur in der Größenordnung 4000 × 3000 Pixel. Größere Fotos werden nic...
Kamera mit Notebook koppeln
Karl Spiegel, 12.11.2016 15:02, 2 Antworten
Hi, Fotografen ich werde eine SONY alpha 77ii bekommen, und möchte die LifeView-Möglichkeit nu...
Linux auf externe SSD installieren
Roland Seidl, 28.10.2016 20:44, 1 Antworten
Bin mit einem Mac unterwegs. Mac Mini 2012 i7. Würde gerne Linux parallel betreiben. Aber auf e...