Startseite TheWayIdo

Die Suche selbst ist oft wichtiger als das Gefundene

Vorweg erwähne ich das geniale KDE Datei-Suchprogramm KFind

Der kleine Nachteil, mit apt-get install kfind installiert man sich ein halbes KDE, welches man ja eigentlich nicht will.

Eine vorherige Sicherung der installierten Pakete ist daher sinnvoll! Dies funktioniert auch ohne Ruthrechte!

$ dpkg --get-selections > ~/debian_pakete_`date +%y-%m-%d`.txt

Um die unten beschriebenen Tools in Skripten zu verwenden, installiert man sich diese wie folgt in Debian.

apt-get install pdfgrep poppler-utils ocrmypdf tesseract-ocr tesseract-ocr-deu \
ghostscript docx2txt odt2txt python3-pdfminer zenity gimagereader pdfarranger

Das Tool pdftotext kommt aus dem Debian-Paket poppler-utils.

ODT2txt extrahiert Text aus LibreOffice ODT-Dateien

Geiler als muessen

ODT2txt benötigt ein bash-Skript.
Wir legen wir uns einen eigenen Ordner via mkdir ~/bin an. Kopiere das Shellscript mit Namen odttext.sh in den Ordner ~/bin und mache es mit chmod -x bin/odttext.sh ausführbar.
Der Start dann im Terminal.
Falls der Ordner ~/bin nicht im Pfad steht, kopiert man dies in die Datei ~/.bashrc
Dies steht zwar auch in der Datei .profile - zieht aber nicht.

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi

Mit dem Skript sucht man nach Wörtern in LibreOffice ODT-Dateien:

#!/bin/bash
## Suchbegriff über Zenity-Eingabedialog abfragen
suchbegriff=$(zenity --entry --title="ODT-Suche" --text="Nach welchem Wort suchen?")
if [ $? -ne 0 ] || [ -z "$suchbegriff" ]; then
	zenity --error --text="Keine Eingabe. Abbruch."
	exit 1
fi
ergebnisse=$(find . -type f -iname "*.odt" -exec sh -c 'odt2txt "$1" | grep -qi "$2" && \
echo "$1"' sh {} "$suchbegriff" \; 2>/dev/null)
if [ -z "$ergebnisse" ]; then
	zenity --info --title="Suchergebnisse" --text="Kein Treffer für '$suchbegriff' gefunden."
	else
	echo "$ergebnisse" | zenity --list --title="Suchergebnisse" \
	--text="Dateien mit '$suchbegriff':" --column="Datei"
fi

Mit diesem Skript sucht man nach Wörtern in Mikkisoft DocX-Dateien:

#!/bin/bash

# Verwende Zenity, um das Verzeichnis auszuwählen
directory=$(zenity --file-selection --directory --title="Wähle ein Verzeichnis aus")

# Wenn der Benutzer "Abbrechen" klickt, das Skript beenden
if [ -z "$directory" ]; then
    zenity --error --text="Kein Verzeichnis ausgewählt. Skript wird beendet."
    exit 1
fi

# Verwende Zenity, um das Suchwort einzugeben
search_word=$(zenity --entry --title="Suchwort eingeben" --text="Gib das Suchwort ein:")

# Wenn kein Suchwort eingegeben wurde, das Skript beenden
if [ -z "$search_word" ]; then
    zenity --error --text="Kein Suchwort eingegeben. Skript wird beendet."
    exit 1
fi

# Suche nach dem Suchwort in allen .docx-Dateien im ausgewählten Verzeichnis
matches=$(find "$directory" -type f -iname "*.docx" -exec sh -c "
    for file; do
        # Extrahiere den Text aus der docx-Datei
        text=\$(docx2txt < \"\$file\")
        
        # überprüfe, ob das Suchwort im Text vorkommt
        if echo \"\$text\" | grep -iq \"$search_word\"; then
            echo \"\$file\"
        fi
    done
" sh {} +)

# Wenn Treffer gefunden wurden, zeige sie in Zenity an
if [ -n "$matches" ]; then
    zenity --info --title="Gefundene Dateien" --text="Das Suchwort '$search_word' \
	wurde in folgenden Dateien gefunden:\n$matches"
else
    zenity --info --title="Keine Treffer" --text="Kein Treffer für '$search_word' gefunden."
fi

PDFgrep - ein schnelles Terminal-Tool um Text in PDF-Dateien zu finden

Geiler als muessen

PDFgrep ist ein Kommandozeilenwerkzeug und durchsucht eine oder mehrere PDF's vom aktuellen Ordner aus nach einem Muster und gibt die Fundstellen im Terminal aus. Es durchsucht PDF-Dateien nach Textmustern (regulären Ausdrücken). ähnlich wie grep für Textdateien und gibt Seitennummern aus. Ideal um schnell Text in komplexen Dokumenten zu lokalisieren.
Es ignoriert Gross- und Kleinschreibung (-i), sucht rekursiv (-r), Trefferanzahlen zählen (-c).

pdfgrep -icr "Suchwort"

Oder mit einem Alias in der .bashrc:

alias suchpdf='suchwort=$(zenity --entry --text="Aktuell-Ordner-Suchwort,ignore G+k") && pdfgrep -ri . -e "$suchwort"'

Um alle CPU-Kerne des Rechners verwenden zu können:apt install parallel

find . -type f -iname '*.pdf' -print0 | parallel -0 -j"$(nproc)" pdfgrep -Hn 'Suchwortjuppi' {}

Tesseract ist eine leistungsstarke Open-Source-OCR-Engine

Friede Freude Eierkucken

Tesseract ist eine optische Zeichenerkennung und ermöglicht Text aus gescannten Dokumenten, Bildern oder PDFs präzise zu extrahieren. Als Kommandozeilen-Tool ist es besonders für Entwickler und fortgeschrittene Nutzer geeignet, die eine flexible und skalierbare Lösung zur Texterkennung suchen. Mit Unterstützung für mehr als 100 Sprachen und umfangreichen Anpassungsmöglichkeiten ist Tesseract ideal für die Automatisierung von Workflows und die Verarbeitung großer Datenmengen.

Ein Beispiel für die Extrahierung von Text aus einem PDF:

pdftotext -layout sample.pdf sample.txt

Ein Beispiel für die Umwandlung eines Bildes mit Textinhalt in ASCII-Text:

tesseract bild-abc.jpg bild-abc

Beispielhaft eine Umwandlung vom Text im Bild in deutschen Text:

tesseract superbild.png supertext -l deu

Dieses Skript durchsucht nach einer händischen Ordnerauswahl und Zenity via Terminal alle PDF-Dateien mit dem angegebenen Suchwort:

#!/bin/bash

# Ordner auswählen (Zenity GUI)
folder=$(zenity --file-selection --directory --title="Wähle den Ordner mit den PDF-Dateien")

# Wenn kein Ordner ausgewählt wurde, beende das Skript
if [ -z "$folder" ]; then
  zenity --error --text="Kein Ordner ausgewählt. Skript wird beendet."
  exit 1
fi

# Suchbegriff eingeben (Zenity GUI)
search_term=$(zenity --entry --title="Suchbegriff" --text="Gib den Text ein, nach dem du suchen möchtest:")

# Wenn kein Suchbegriff eingegeben wurde, beende das Skript
if [ -z "$search_term" ]; then
  zenity --error --text="Kein Suchbegriff eingegeben. Skript wird beendet."
  exit 1
fi

# Rekursive Suche nach PDFs im gewählten Ordner
results=$(find "$folder" -type f -iname "*.pdf" -exec pdftotext {} - 2>/dev/null \; | grep -i "$search_term")

# Wenn Ergebnisse gefunden wurden, zeige sie in einem Zenity-Info-Dialog
if [ -n "$results" ]; then
  zenity --info --text="Ergebnisse gefunden:\n\n$results"
else
  zenity --info --text="Keine Ergebnisse gefunden."
fi

Mit diesem Alias in der Datei ~/.bashrc sucht man nach Text in Ascii Dateien mit der Endung .txt:

alias suchtxt='suchwort=$(zenity --entry --text="Suchwort eingeben") && grep -rniw --include="*.txt" . -e "$suchwort"'

Mit diesem Alias sucht man Dateien. Platzhalter wie Sterne und Fragezeichen sind erlaubt!

alias find-z='zenity --entry --text="Suchwort Datei, Platzhalter erlaubt" | xargs find . -iname'

Fügt man in der ~/.bashrc Code oder Aliase hinzu, sollte man im Anschluss mit bash im Terminal die Änderungen bestätigen oder via source ~/.bashrc

Mit Recoll ist man mit Abstand bei der eierlegenden Wollmichsau

Die Installation der Suchdatenbankanwendung und Erweiterungen erfolgt so in Debian:
apt install recoll python3-py7zr pff-tools unrtf antiword poppler-utils ghostscript catdoc xsltproc libavcodec-extra

Viel Spaß mit den Tools in Debian, ohne alles irgendeiner künstlichen Intelligenz seine Daten befingern zu lassen!

Zurück ↑°↑