Home / LinuxUser / 2012 / 04 / Suche in komprimierten Dateien und Archiven

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Eingedost
(161 Punkte bei 4 Stimmen)
Aufteiler
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Nadel im Datenhaufen

Suche in komprimierten Dateien und Archiven

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

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

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"
Tip a friend    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 05/2014

Aktuelle Ausgabe kaufen:

Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Bilder vergleichen mit diffimg
Bilder vergleichen mit diffimg
Tim Schürmann, 01.04.2014 12:40, 1 Kommentare

Das kleine Werkzeug diffimg kann zwei (scheinbar) identische Bilder miteinander vergleichen und die Unterschiede optisch hervorheben. Damit lassen sich nicht nur Rätsel a la „Orignial und Fäls...

Aktuelle Fragen

programm suche
Hans-Joachim Köpke, 13.04.2014 10:43, 8 Antworten
suche noch programme die zu windows gibt, die auch unter linux laufen bzw sich ähneln sozusagen a...
Funknetz (Web-Stick)
Hans-Joachim Köpke, 04.04.2014 07:31, 2 Antworten
Bei Windows7 brauche ich den Stick nur ins USB-Fach schieben dann erkennt Windows7 Automatisch, a...
Ubuntu 13.10 überschreibt immer Windows 8 Bootmanager
Thomas Weiss, 15.03.2014 19:20, 8 Antworten
Hallo Leute, ich hoffe das ich richtig bin. Ich habe einen Dell Insipron 660 Ich möchte gerne Ub...
USB-PTP-Class Kamera wird nicht erkannt (Windows-only)
Wimpy *, 14.03.2014 13:04, 15 Antworten
ich habe meiner Frau eine Digitalkamera, AGFA Optima 103, gekauft und wir sind sehr zufrieden dam...
Treiber
Michael Kristahn, 12.03.2014 08:28, 5 Antworten
Habe mir ein Scanner gebraucht gekauft von Canon CanoScan LiDE 70 kein Treiber wie bekomme ich de...