Moechte man in Textdateien nach bestimmten Strings suchen, gibt es unter Linux mehrere Moeglichkeiten – grep, find, cat. Da kann man vielfaeltig was zusammenbauen. Ich nutze zum suchen in Textdateien immer den folgenden Befehl:
grep -rnw 'verzeichnis' -e "gesuchter_string"
Nun stellte mich ein Problem vor die Aufgabe, in mit Microsoft Word erstellten .doc-Dateien zu suchen.
Da .doc-Dateien etwas spezieller sind was den Inhalt angeht und nicht nur Klartext enthalten, ist es mit mienem Standardbefehl nicht einfach moeglich in diesen Dateien zu suchen.
Aber es gibt Abhilfe. Unter Linux gibt es das kleine Tool „catdoc“ welches, wie der Name schon verlauten laesst, funktioniert wie „cat“. Also puren Text als Output an die Konsole sendet.
Im ausgegebenen Text kann dann wie bei der cat/grep-Kombination gesucht werden.
cat/grep-Kombination fuer normale Textdateien:
cat Datei | grep Suchstring
catdoc/grep-Kombination fuer .doc-Dateien:
catdoc Datei.doc | grep Suchstring
Nun gilt es das noch zu erweitern. Ging es in meinem Problem doch darum, alle .doc-Dateien in einem Verzeichnis zu durchsuchen. Das koennte man nun ueber ein Bash-Script mit einer einfachen for(each)-Abfrage loesen.
Ich habe jedoch noch etwas bequemeres gefunden:
#!/bin/bash export GREP_OPTIONS='--color=auto' echo -e "\n Welcome to scandocs. This will search .doc (NOT .docx) files in this directory for a given string. \n Type in the text string you want to find... \n" read response find . -name "*.doc" | while read i; do catdoc "$i" | grep -iH --label="$i" "$response"; done
Wird dieses Script ausgefuehrt, so fragt es nach einem String und durchsucht anschliessend alle im ausgefuehrten Verzeichnis befindlichen .doc-Dateien.
Damit das Script funktioniert, muss „catdoc“ natuerlich installiert werden. Zumindest in meinem Fall, unter Debian, geht das ganz einfach ueber apt.
Quellen:
Finding all files containing a text string on Linux
Search MS word files in a directory for specific content in Linux
„catdoc“ bei Freecode