Suchfunktion verbessert Die Ausführungen der
ersten Seite über Programmfenster werden hier weitergeführt. Auf der ersten Seite mit Programmfenstern wurde eine Suchfunktion angesprochen. Die Installation des Paketes catdoc ist notwendig. Dieses Paket enthält auch einen Terminalbefehl xls2csv mit dem xls-Excel-Dateien in csv-Dateien konvertiert werden. Es gibt auch ein weiteres Paket xlsx2csv mit dem xlsx-Dateien in csv-Dateien konvertiert werden. Da ich viel mit Textdateien und Tabellen (Libre Office und xls) 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 "auch durch Leerzeichen getrennte Worte sind möglich") 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="TEXT htm":CHK --field="Libre Office":CHK --field="Word":CHK --field="xls excel":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 '|') suchXLS=$(echo "$yA" | cut -f 4 -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,xls,xlt} -E -rie "$szSuch" "$szPath" | sed 's/:/: /1' | sed "s/^\([^:]*: \).*\(........$szSuch.*\)$/\1 \2/i" | cut -c 1-120) else suTX=" " fi if [ "$suchXLS" = "TRUE" ]; then suXL=$(find "$szPath" -name "*.xls" | while read file do xls2csv "$file" | grep -qli "$szSuch" if [ $? -eq 0 ]; then echo $file: $(xls2csv "$file" | grep -im 1 "$szSuch" | sed "s/^.*\(..............$szSuch............\).*/\1/i" | cut -c 1-80 ) fi done ) else suXL=" " 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 -im 1 "$szSuch" | sed "s/^.*\(..............$szSuch............\).*/\1/i" | cut -c 1-100 ) fi done ) else suLI=" " fi suA2=$(cat <(echo "$suLI") <(echo "$suTX") <(echo "$suWO") <(echo "$suXL")) zenity --text-info --title="Suchergebnisse" --width=1000 --height=400 2> /dev/null <<< $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 Rechtsklick auf und Ausführen öffnet sich ein Fenster in dem man Such-Zeichen eingeben kann. Dies können auch Satzteile sein die Leerzeichen enthalten oder auch Umlaute enthalten. |
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") |
|