Kategorien
linux opensource software uup

Viele OpenOffice Dokumente nach Begriff durchsuchen

Man gehe davon aus, man hat einen Ordner voller Textdokumente im Open Document Format (.odf) und möchte diese nach einem (oder mehreren) Suchbegriffen durchsuchen. Nun kann man diese jeweils einzeln öffnen und die Suchfunktion von OpenOffice (o.ä.) bemühen, oder sich dort ein kleines Makro stricken.

Oder, man macht sich die Offenheit des Formates zu Nutze und durchsucht die Dokumente mit dem in dem Shell-Skript am Ende des Artikels.

Als kleine Hintergrundinformation sei gesagt, das ein Dokument im Open Document Format nichts anderes ist als eine (oder mehrere) XML-Datei(en), die in ein zip-Archiv verpackt sind. Das Skript macht nichts anderes als Dateien mit der Endung .odt mit Hilfe von ‚find‘ zu suchen, diese mit ‚unzip‘ zu entpacken und mit unserem guten Freund ‚grep‘ zu durchsuchen.

Doch genug der Theorie, auf zum Wesentlichen, dem Skript:

#!/bin/bash

if [ $# -ne 2 ]; then
    echo "Benutzung: searchodt pfad ausdruck"
    exit 1
fi

    find $1 -name "*.odt" | while read file
    do
        unzip -ca "$file" content.xml | grep -qli "$2"
    if [ $? -eq 0 ]; then
        echo "Suchbegriff gefunden in " $file
    fi
done

Anleitung:
Man kopiere das obige Skript und füge es in eine Datei Namens ’searchodt‘ ein. Mache diese ausführbar:

chmod +x searchodt

Anschließend läßt man das Skript auf seine Dokumente los:

./searchodt /pfad/zu/den/odf-dateien suchbegriff

Für jedes Dokument, in dem der Suchbegriff gefunden wurde erhält man als Ausgabe eine Zeile der folgenden Art:

Suchbegriff gefunden in [dateiname]

Und nun viel Spaß beim Suchen.

PS: Versucht das man mit einem .doc hinzubekommen 😉

9 Antworten auf „Viele OpenOffice Dokumente nach Begriff durchsuchen“

Hi,

obwohl ich noch nie vor dem Problem gestanden habe viele odt-Dateien zu durchsuchen, finde ich den Artikel auf jeden Fall sehr interessant.

Grüße
Michael

Hast Du denn schon einmal Beagle versucht.
Beagle durchsucht Dateien nach mehreren Begriffen und auf der gesamten HD. Auch doc, odt, pdf usw.

Gruß

Ich muss gestehen, ich mag diese Desktop-Such-Softwares nicht besonders…belegen Systemresourcen und Speicherplatz…
und wenn ich wirklich nur in einem bestimmten Verzeichnis suchen möchte, oder das ganze auf einem Server direkt machen möchte, dann ist mir so ein kleines schmales Skript deutlich lieber 🙂

Mit zgrep kann man das Skript noch etwas vereinfachen. Ob es auch von der Performance her was bringt, kann ich nicht beurteilen (und hab’s auch nicht getestet).

P.S.: Man kann auch DOCs mit grep durchsuchen. Dabei wird natürlich keine Zeile bei Fundstellen angegeben (gibt’s bei Binärformaten nicht in der Form), aber immerhin, ob etwas vorkommt oder nicht. Mehr brauchst du für das Skript ja nicht.

@FriedChicken: ich glaube zgrep kann nur mit gzip gepackte dateien, die OpenDocument Dateien sind aber mit zip gepackt…
Ich habe gerade mal getestet, ohne Ergebnis…

Wow, nachdem ich nun einige Tage zwei Linuxforen mit meinen Fragen beschäftigt habe, finde ich hier das Skript, das die genaue Lösung für meine Fragen ist!

Für doc-Dateien ist es eigentlich nicht nötig, denn grep findet Zeichenfolgen in der Binärdatei – allerdings keine Umlaute und ß. Wenn man ins Skript aber catdoc statt unzip einsetzt, funktioniert es wunderbar auch für doc-dateien.

Da ich selbst nicht genug Ahnung davon habe, wie man ein Skript schreibt, frage ich einfach mal an, ob man nicht diese beiden Suchen „searchodt“ und „searchdoc“ in einem Skript vereinigen könnte.

Dank und Gruß HaCeMei

Kommentare sind geschlossen.