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:

  1. #!/bin/bash
  2.  
  3. if [ $# -ne 2 ]; then
  4. echo "Benutzung: searchodt pfad ausdruck"
  5. exit 1
  6. fi
  7.  
  8. find $1 -name "*.odt" | while read file
  9. do
  10. unzip -ca "$file" content.xml | grep -qli "$2"
  11. if [ $? -eq 0 ]; then
  12. echo "Suchbegriff gefunden in " $file
  13. fi
  14. done

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

  1. chmod +x searchodt

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

  1. ./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:

  1. Suchbegriff gefunden in [dateiname]

Und nun viel Spaß beim Suchen.

PS: Versucht das man mit einem .doc hinzubekommen 😉

9 Gedanken zu „Viele OpenOffice Dokumente nach Begriff durchsuchen

  1. Michael

    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

  2. Pingback: Aktuelle Links (gespeichert vom 18.09.2009 bis zum 19.09.2009) « Der Webanhalter

  3. Michael2

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

    Gruß

  4. zero

    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 🙂

  5. FriedChicken

    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.

  6. zero

    @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…

  7. Pingback: Viele OpenOffice Dokumente nach Begriff durchsuchen | Stefan's Weblog

  8. HaCeMei

    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

  9. Pingback: Anonymous

Kommentare sind geschlossen.