Suchfunktion verbessert Die Ausführungen der
ersten Seite über Programmfenster werden hier weitergeführt. Auf der ersten Seite mit Programmfenstern wurde eine Suchfunktion angesprochen (Installation des Paketes catdoc notwendig). Da ich viel mit Textdateien und Tabellen arbeite ist es für mich vorteilhaft eine solche Suchfunktion zu haben. Hier wird eine Verbesserung beschrieben. Denn manchmal ist es wünschenswert mehrere Datei-Arten gleichzeitig zu durchsuchen |
Man kann dann die Kästchen anklicken um die gewünschten Dateiarten zu
bestimmen. Es wird zunächst etwas über (spaltenartige) Variablen notiert. Dazu wird schnell eine erzeugt, mit dem sed-Baustein Leerzeichen wird in Zeilenumbruch verwandelt: |
cV="blaa alba laba" |
vV=$(echo "$cV" | sed 's| |\n|g') |
echo "$vV" |
blaa alba laba Dann wird eine zweite erzeugt indem man die Zeichen von "$vV" durcheinanderwirbelt |
vW=$(echo "$vV" | sed -e 'y|abl|257|') |
echo "$vW" |
5722 2752 7252 Man kann diese (spaltenartigen) Variablen aneinanderkleben |
paste <(echo "$vW") <(echo "$vV") |
Man kann Zeilen einfügen, nach vorhandenen Zeilen die 72 enthalten |
echo "$vW" | sed '/72/ a ###danach' |
5722 ###danach 2752 7252 ###danach Man kann Zeilen einfügen, vor vorhandenen Zeilen die 72 enthalten |
echo "$vW" | sed '/72/ i ###davor' |
###davor 5722 2752 ###davor 7252 Man kann eine neue Zeile an das Ende setzen |
echo "$vW" | sed '$ s|$|\n###Schlußzeile|' |
echo "$vW" | sed '$a###Schlußzeile' |
5722 2752 7252 ###Schlußzeile Man kann eine neue Zeile an den Anfang setzen |
echo "$vW" | sed '1 s|^|###Anfangszeile\n|' |
echo "$vW" | sed '1i###Anfangszeile' |
###Anfangszeile 5722 2752 7252 |
Man kann diese (spaltenartigen) Variablen untereinanderkleben |
vZ=$(cat <(echo "$vW") <(echo "$vV")) |
echo "$vZ" |
Dieses Untereinanderkleben wird später verwendet. Eine weitere Verbesserung wird sein, daß kein Zugriff auf externe scripte (wie ~/.searchodt und ~/.searchdoc) oder TMP-Dateien erfolgt und somit kein Löschen der TMP-Dateien mehr nötig ist. Alles wird in einem script hinterlegt. Desweiteren wird die Suchfunktion für Text-Dateien verbessert, denn es sollen keine Bild-Dateien (auch ods und odt enthalten Vorschaubilder) oder gar mp4-Dateien durchsucht werden. Andere Ausnahmen können Sie schnell hinzufügen, etwa Musik-Dateien. Dies kostet unnötige Suchzeit. Und bei der Ausgabe der Suchergebnisse wird eine kleine Umgebung des Suchbegriffs innerhalb der Datei angezeigt. Die Suchzeichen bei Großbuchstaben werden auch als Kleinbuchstaben verstanden und umgekehrt. Z.B. ergibt die Suche nach auto nicht nur Ergebisse wie autonom sondern auch AUTO aUTO Auto .. Auf der ersten Seite mit Programmfenstern wurde das script scS.sh im Ordner ~/Bla abgelegt. Man kann dieses umbenennen. Das verbesserte script wird jetzt mit dem alten Namen wieder neu im Ordner ~/Bla erzeugt: |
nano ~/Bla/scS.sh |
Eingabe in den Editor: |
#!/bin/bash szSuch=$(zenity --title="Such-Zeichen eingeben" --width="400" --entry --text " Bei Excel-txt-Suche sollten \n keine Umlaute eingegeben werden" ) if [ $? -ne 0 ]; then exit fi yA=$(yad --width="400" --height="200" --title="Welche Datei-Art soll durchsucht werden?" --form --text "mehrere Auswahlen sind möglich" --field="Excel txt":CHK --field="Libre Office":CHK --field="Word":CHK ) if [ $? -ne 0 ]; then exit fi suchTXT=$(echo "$yA" | cut -f 1 -d '|') suchWORD=$(echo "$yA" | cut -f 3 -d '|') suchLIB=$(echo "$yA" | cut -f 2 -d '|') szPath=$(zenity --file-selection --directory --title "In welchem Ordner soll gesucht werden" ) if [ $? -ne 0 ]; then exit fi if [ "$suchTXT" = "TRUE" ]; then suTX=$(grep --exclude=*.{jpg,png,gif,mp4,ods,odt} -E -rie "$szSuch" "$szPath" | sed 's/:/: /1' | sed "s/^\([^:]*: \).*\(......$szSuch.*\)$/\1 \2/i" | cut -c 1-120) else suTX=" " fi if [ "$suchWORD" = "TRUE" ]; then suWO=$(find "$szPath" -name "*.doc" | while read file do catdoc "$file" | grep -qli "$szSuch" if [ $? -eq 0 ]; then echo $file: $(catdoc "$file" | grep -im 1 "$szSuch") fi done ) else suWO=" " fi if [ "$suchLIB" = "TRUE" ]; then suLI=$(find "$szPath" -name "*.od*" | while read file do unzip -ca "$file" content.xml | grep -qli "$szSuch" if [ $? -eq 0 ]; then echo $file: $(unzip -ca "$file" content.xml | sed "s/<[^>]*>//g" | grep -i $szSuch | sed -r "s/^.*(.{6}$szSuch.{80}).*/\1/i" ) fi done ) else suLI=" " fi suA2=$(cat <(echo "$suLI") <(echo "$suTX") <(echo "$suWO")) zenity --text-info --title="Suchergebnisse" --width=1000 --height=400 <<< $suA2 & yB=$(yad --title="Ergebnisse weiter durchsuchen" --columns="1" --form --align=center --field="weiter suchen":CE --field="OHNE Zeichen":CE --button="Ergebnisse eingrenzen" ) if [ $? -ne 0 ]; then exit fi IFS="|" read szSU szNICHT <<< "$yB" if [[ -n "$szNICHT" ]] && [[ -n "$szSU" ]]; then suA3=$(echo "$suA2" | grep -v "$szNICHT" | grep "$szSU") elif [[ -z "$szNICHT" ]] && [[ -n "$szSU" ]]; then suA3=$(echo "$suA2" | grep "$szSU") elif [[ -n "$szNICHT" ]] && [[ -z "$szSU" ]]; then suA3=$(echo "$suA2" | grep -v "$szNICHT") else suA3=$(echo "KEINE FILTER GEWÄHLT") fi zenity --text-info --title="Suchergebnisse gefiltert" --width=1000 --height=400 <<< $suA3 |
Nun muß man diese Datei ausführbar machen: |
chmod +x ~/Bla/scS.sh |
Mit Rechtsklick auf die
Datei wählt man wieder Eigenschaften. Dann vergibt man einen Namen, hier etwa Suche Für das Icon wählt man die Datei C6.png aus dem Ordner Bla, dann schließt man das Eigenschaften-Menü. Nach Doppelklick auf ![]() Bei 'Excel txt'-Dateien sollten keine Umlaute enthalten sein. |
Nach Klicken auf OK öffnet sich ein Fenster in dem die Datei-Art bestimmt werden kann. |
Nach Klicken auf OK öffnet sich ein neues Fenster in dem man einen Ordner
bestimmen kann in dem anschließend gesucht wird. Danach beginnt die Suche und die Ergebnisse werden angezeigt. Gleichzeitig öffnet sich ein zweites Fenster durch das man die Suchergebnisse weiter verfeinern kann. |
Man kann den Eintrag einer gefundenen Datei markieren (kopieren). Dann
kann man die Tasten Alt und F2 drücken. Es öffnet sich ein
Eingabefenster. |
Dort kann man den Text einfügen und die Eingabetaste drücken.
Dann wird die gefundene Datei geöffnet. Das Untereinanderkleben kann auch in in anderer Form erfolgen |
suA2=$(cat <<EOF $suLI $suTX $suWO EOF ) |
Das Untereinanderkleben kann sogar noch anders erfolgen |
suA2=$(echo -e "$suLI\n$suTX\n$suWO") |
|