ubuntuusers.de

Find - Vorhandene Dateien verschieben problem

Status: Ungelöst | Ubuntu-Version: Ubuntu Budgie 22.04 (Jammy Jellyfish)
Antworten |

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

Ich habe 'shopt -s nocaseglob' in die ~/.bashrc eingetragen. So funktioniert es.

Kann man das machen oder bekomme ich da irgendwann Probleme?

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

karzer schrieb:

Führe das nochmal aus (also shopt -s nocaseglob) und dann versuche ls -l *wichtig*. Dann guck, ob die großgeschriebenen wichtig's mitausgegeben werden.

Wenn ich das so mache dann klappt es. Listet beides auf.

karzer Team-Icon

Wikiteam
Avatar von karzer

Anmeldungsdatum:
10. April 2022

Beiträge: 1497

Wohnort: Bad Oeynhausen

DPoi schrieb:

Ich habe 'shopt -s nocaseglob' in die ~/.bashrc eingetragen. So funktioniert es.

Kann man das machen oder bekomme ich da irgendwann Probleme?

Das geht, wenn Du immer und auf ewig für ls und die Expansion keinen Unterschied zwischen Title.txt und title.txt haben willst. Ich weiß ja auch nicht, wie oft Du dieses Skript ausführen möchtest.

DPoi schrieb:

karzer schrieb:

Führe das nochmal aus (also shopt -s nocaseglob) und dann versuche ls -l *wichtig*. Dann guck, ob die großgeschriebenen wichtig's mitausgegeben werden.

Wenn ich das so mache dann klappt es. Listet beides auf.

Dann müsste das Skript eigentlich auch gehen.

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

Mir wäre es echt lieber wenn es irgendwie im Script funktioniert. Ich brauche das schon ein- zweimal die Woche...

karzer Team-Icon

Wikiteam
Avatar von karzer

Anmeldungsdatum:
10. April 2022

Beiträge: 1497

Wohnort: Bad Oeynhausen

DPoi schrieb:

Mir wäre es echt lieber wenn es irgendwie im Script funktioniert. Ich brauche das schon ein- zweimal die Woche...

So geht es nicht?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/sh

shopt -s nocaseglob

[ $# -gt 0 ] || set -- wichtig haus finanzen

for operand; do 
   mkdir -p "$operand"
 
   for file in *"$operand"*; do 
     [ -f "$file" ] && mv "$file" "$operand"
   done
done

shopt -u nocaseglob

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

Nein, dann kommt die Meldung "shopt: not found"

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

Mit '#!/bin/bash' klappt es!!

karzer Team-Icon

Wikiteam
Avatar von karzer

Anmeldungsdatum:
10. April 2022

Beiträge: 1497

Wohnort: Bad Oeynhausen

DPoi schrieb:

Mit '#!/bin/bash' klappt es!!

👍

Ja, ist eigentlich logisch, sh (dash) unterstützt sowas nicht.

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

Na, dann bin ich jetzt aber froh das es soweit klappt wie ich es mir vorgestellt habe. Schöne Sache. Nimmt mir viel Sucherei ab. ☺ 👍

Ich danke euch für die Unterstützung. War echt sehr lehrreich für mich!!! Wenn ich in der Anwendung nochmal Hilfe für ene evtl. Umsetzung benötige, dann melde ich mich hier noch einmal dazu?

Fetten Dank und Gruß!

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

Achja, eine Sache war da noch.

Also wenn ich dann z. B. auch genau nach 'haus' suche und NICHT noch 'hausmeister' mit finden möchte. Wie gehe ich da am besten vor? Ich kann ja das script aufrufen mit

1
suche.sh haus

dann findet er auch den hausmeister. Muß das script geändert werden oder kann ich das im Aufruf schon mit vorgeben? Da bin ich nochnicht so fitt drin.

Tx!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13131

karzer schrieb:

rklm schrieb:

Tatsächlich kannte ich "nocaseglob" vor meiner Antwort nicht. Ich habe einfach mal auf Verdacht nachgeschaut (mit Suchwort "case"). 😛

Aber es funktioniert ausgezeichnet! Vielleicht könnte man am Ende noch

shopt -u nocaseglob

einfügen, wenn man danach wieder das natürliche Verhalten haben will

Das ist völlig unnötig, weil die Änderung ja nur in der Shell wirksam ist, die das Skript ausführt.

karzer schrieb:

DPoi schrieb:

Das deaktiviert die Option, die wie

rklm schrieb:

DPoi schrieb:

Das funktioniert recht gut!! EIne Kleinigkeit ist noch vorhanden. Wenn "wichtig haus finanzen" mit großem Anfangsbuchstaben geschrieben wurden dann werden die nicht erkannt. Wie kann ich dem Script sagen es soll Groß/Kleinschreibung ignorieren? Geht das?

Dann brauchst Du die bash und musst shopt -s nocaseglob aufrufen. Dann kannst Du auch gleich noch shopt -s nullglob nutzen.

erst aktiviert werden muss. Also erstmal shopt -s nocaseglob im Terminal ausführen,

Nein! Das ist völlig unnütz!

1
2
3
4
5
6
7
$ shopt nocaseglob
nocaseglob     	off
$ shopt -s nocaseglob
$ shopt nocaseglob
nocaseglob     	on
$ bash -c 'shopt nocaseglob'
nocaseglob     	off

dann nach Ausführung des Skripts vielleicht noch mal shopt -u nocaseglob, wenn Du danach wieder normales ls-Verhalten haben willst.

Wenn man das in der aufrufenden Shell gemacht hat, muss man es natürlich wieder zurücksetzen, falls man das alte Verhalten will. Aber das ist, wie gesagt, nicht die Lösung für das Skript.

DPoi schrieb:

Ich habe 'shopt -s nocaseglob' in die ~/.bashrc eingetragen. So funktioniert es.

Kann man das machen oder bekomme ich da irgendwann Probleme?

Du stellst damit alle bash auf "nocaseglob" um. Ich würde das nicht machen, aber das hängt halt davon ab. Es ist aber völlig irrelevant für die Shell, die das Skript ausführt, weil nicht-interaktive Shells die ~/.bashrc gar nicht ausführen.

DPoi schrieb:

Mir wäre es echt lieber wenn es irgendwie im Script funktioniert. Ich brauche das schon ein- zweimal die Woche...

Dann schreibst Du es halt nur ins Skript, wie ich eingangs beschrieben habe. Warum setzt Du das nicht genau so um?

DPoi schrieb:

Mit '#!/bin/bash' klappt es!!

Auch das hatte ich ja bereits geschrieben...

DPoi schrieb:

Also wenn ich dann z. B. auch genau nach 'haus' suche und NICHT noch 'hausmeister' mit finden möchte. Wie gehe ich da am besten vor?

Wird kompliziert. Du brauchst auf jeden Fall einen ganz anderen Ansatz, wenn Du solche Ausschlüsse definieren willst. Als Workaround kannst Du schauen, dass Du "hausmeister" immer vor "haus" (allgemeiner: die längeren Wörter vor den kürzeren) in der Argumentliste hast.

karzer Team-Icon

Wikiteam
Avatar von karzer

Anmeldungsdatum:
10. April 2022

Beiträge: 1497

Wohnort: Bad Oeynhausen

rklm schrieb:

DPoi schrieb:

Also wenn ich dann z. B. auch genau nach 'haus' suche und NICHT noch 'hausmeister' mit finden möchte. Wie gehe ich da am besten vor?

Wird kompliziert. Du brauchst auf jeden Fall einen ganz anderen Ansatz, wenn Du solche Ausschlüsse definieren willst. Als Workaround kannst Du schauen, dass Du "hausmeister" immer vor "haus" (allgemeiner: die längeren Wörter vor den kürzeren) in der Argumentliste hast.

Wie wäre es mit einer Blacklist, wo dann nach jedem Match überprüft wird, ob einer der Begriffe im Dateinamen enthalten ist?

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

Okay. also dann bleibt es bei diesem script. Alles gut! Funktioniert.

Ich habe jetzt nur noch das 'shopt -s nocaseglob' im script, alles andere wie vorher (.bashrc) zurückgestellt. Habe jetzt verstanden wie die Auswirkungen sind und werde mich weiter damit beschäftigen.

Also dann danke und Gruß!!! 😎 👍

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13131

karzer schrieb:

Wie wäre es mit einer Blacklist, wo dann nach jedem Match überprüft wird, ob einer der Begriffe im Dateinamen enthalten ist?

Ich denke bevor man mit weiteren Lösungen um die Ecke kommt, muss man definieren, was genau das Ziel ist. Sind "hausmeister" und "haus" beides Begriffe, nach denen man sortieren will? Oder ist es nur "haus", aber "hausmeister" sollen am üblichen Platz verbleiben? Und was ist mit möglichen weiteren Begriffen, die "haus" beinhalten (z.B. "schausteller")? usw.

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

Genau, es geht um ‚Haus‘ und alles andere soll am Platz bleiben. Also eine genaue Wortsuche sozusagen… es geht um genau diesen Begriff den ich als Parameter mitgebe und nur der soll positiv bearbeitet werden.

Ich habe schon herausgefunden wenn es um einen Begriff mit Leerzeichen geht - was auch vorkommen kann - dann setze ich den in Hochkomma. Das klappt. Ich kann nur z.B. haus nicht als einzelnen Suchparameter angeben, weil er dann ebenfalls hausmeister mit aussortiert… wobei es an anderer Stelle mit anderen Begriffen durchaus so sein soll/muss. Das klappt auch alles.

Hoffe ich habe mich verständlich ausgedrückt? 😎👍

Gruß