DPoi
(Themenstarter)
Anmeldungsdatum: 6. Januar 2015
Beiträge: 356
|
Boh Jungs… jetzt wird es schwierig für mich. Ich möchte mit einem Script realisieren, das ich nach Aufruf das Startverzeichnis so bearbeiten kann wie wir es hier zusammen erarbeitet haben. In diesem Script würde ich nun einige Zeilen mit dem kpl. Find-Befehl und unterschiedlichen Suchbegriffen/Ziel eintragen. Dann sortiert das Script mir das durcheinander in die vorgegebenen Verzeichnisse und ich kann die je nach Priorität abarbeiten. So möchte ich das haben. Was ihr in den letzten Beiträgen diskutiert leuchtet mir ein, ich denke das man es so einfacher realisieren kann. Wie würde das aussehen wenn ich ein Script mit erstmal 3 Begriffen: wichtig; haus; finanzen; abarbeiten möchte? Das muss ja dann in die for-done Schleife, ne? Mal sehen ob ich das verstehe und auch hinbekomme. Ihr habt mir hier echt eine Menge beigebracht. Aber das mit den Schleifen ist für mich noch ein Buch mit 7 Siegeln. Danke und Gruß!
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1497
Wohnort: Bad Oeynhausen
|
DPoi schrieb: Was ihr in den letzten Beiträgen diskutiert leuchtet mir ein, ich denke das man es so einfacher realisieren kann. Wie würde das aussehen wenn ich ein Script mit erstmal 3 Begriffen: wichtig; haus; finanzen; abarbeiten möchte? Das muss ja dann in die for-done Schleife, ne?
Genau wie rklm schrieb: | for operand in wichtig haus finanzen; do
mkdir -p "$operand"
for file in *"$operand"*; do
[ -f "$file" ] && mv "$file" "$operand"
done
done
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13131
|
karzer schrieb: DPoi schrieb: Was ihr in den letzten Beiträgen diskutiert leuchtet mir ein, ich denke das man es so einfacher realisieren kann. Wie würde das aussehen wenn ich ein Script mit erstmal 3 Begriffen: wichtig; haus; finanzen; abarbeiten möchte? Das muss ja dann in die for-done Schleife, ne?
Genau wie rklm schrieb: | for operand in wichtig haus finanzen; do
mkdir -p "$operand"
for file in *"$operand"*; do
[ -f "$file" ] && mv "$file" "$operand"
done
done
|
Oder sogar so, dass man die Werte dem Skript übergibt: | #!/bin/sh
for operand; do
mkdir -p "$operand"
for file in *"$operand"*; do
[ -f "$file" ] && mv "$file" "$operand"
done
done
|
Oder sogar beides erlauben: | #!/bin/sh
[ $# -gt 0 ] || set -- wichtig haus finanzen
for operand; do
mkdir -p "$operand"
for file in *"$operand"*; do
[ -f "$file" ] && mv "$file" "$operand"
done
done
|
Wenn nix übergeben wird, werden "wichtig", "haus" und "finanzen" benutzt. Zur Sicherheit würde ich auch noch ein cd vorne im Skript einbauen, damit man sicher ist, dass es im korrekten Verzeichnis ausgeführt wird - es sei denn, man will das in verschiedenen Verzeichnissen machen. Ich füge auch gerne noch oben im Skript ein set -e ein, damit das Skript sofort abbricht, wenn es unbehandelter Fehler auftritt.
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1497
Wohnort: Bad Oeynhausen
|
rklm schrieb: | #!/bin/sh
[ $# -gt 0 ] || set -- wichtig haus finanzen
for operand; do
|
Mit for operand kann man einfach über alle Kommandozeilenargumente iterieren?
|
DPoi
(Themenstarter)
Anmeldungsdatum: 6. Januar 2015
Beiträge: 356
|
rklm schrieb:
Oder sogar beides erlauben: | #!/bin/sh
[ $# -gt 0 ] || set -- wichtig haus finanzen
for operand; do
mkdir -p "$operand"
for file in *"$operand"*; do
[ -f "$file" ] && mv "$file" "$operand"
done
done
|
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? Ansonsten bin ich schonmal seeeehr zufrieden!! 😎 Tx!
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1497
Wohnort: Bad Oeynhausen
|
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?
So dürfte es gehen: | #!/bin/sh
[ $# -gt 0 ] || set -- wichtig haus finanzen
for operand; do
mkdir -p "$operand"
for file in *[A-Za-z]${operand:1}*; do
[ -f "$file" ] && mv "$file" "$operand"
done
done
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13131
|
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.
Ansonsten bin ich schonmal seeeehr zufrieden!! 😎
👍
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1497
Wohnort: Bad Oeynhausen
|
rklm schrieb: Dann brauchst Du die bash und musst shopt -s nocaseglob aufrufen. Dann kannst Du auch gleich noch shopt -s nullglob nutzen.
Terrific, dieses Wissen. Hut ab.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13131
|
karzer schrieb: rklm schrieb: Dann brauchst Du die bash und musst shopt -s nocaseglob aufrufen. Dann kannst Du auch gleich noch shopt -s nullglob nutzen.
Terrific, dieses Wissen. Hut ab.
Tatsächlich kannte ich "nocaseglob" vor meiner Antwort nicht. Ich habe einfach mal auf Verdacht nachgeschaut (mit Suchwort "case"). 😛
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1497
Wohnort: Bad Oeynhausen
|
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
|
DPoi
(Themenstarter)
Anmeldungsdatum: 6. Januar 2015
Beiträge: 356
|
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
Wenn ich das ins script einfügen möchte... klappt nicht. Verstehe ich da was nicht?
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1497
Wohnort: Bad Oeynhausen
|
DPoi schrieb: 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
Wenn ich das ins script einfügen möchte... klappt nicht. Verstehe ich da was nicht?
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, dann nach Ausführung des Skripts vielleicht noch mal shopt -u nocaseglob , wenn Du danach wieder normales ls -Verhalten haben willst.
|
DPoi
(Themenstarter)
Anmeldungsdatum: 6. Januar 2015
Beiträge: 356
|
karzer schrieb:
erst aktiviert werden muss. Also erstmal shopt -s nocaseglob im Terminal ausführen, dann nach Ausführung des Skripts vielleicht noch mal shopt -u nocaseglob , wenn Du danach wieder normales ls -Verhalten haben willst.
Ja, das habe ich so gemacht. Aber das klappt nicht. Erst im Terminal 'shopt -s nocaseglob' dann das Script und er macht trotzdem nur die kleingeschriebenen files.
Ich habe aber auch irgendwo gelesen das shopt bei Ubuntu nicht funktioniert?! Muss ich nochmal suchen. Hmm...
|
DPoi
(Themenstarter)
Anmeldungsdatum: 6. Januar 2015
Beiträge: 356
|
karzer schrieb: for file in *[A-Za-z]${operand:1}*; do
Meldung nach start: sortieren.sh: 8: Bad substitution Da komme ich nicht weiter... ☺
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1497
Wohnort: Bad Oeynhausen
|
DPoi schrieb: karzer schrieb:
erst aktiviert werden muss. Also erstmal shopt -s nocaseglob im Terminal ausführen, dann nach Ausführung des Skripts vielleicht noch mal shopt -u nocaseglob , wenn Du danach wieder normales ls -Verhalten haben willst.
Ja, das habe ich so gemacht. Aber das klappt nicht. Erst im Terminal 'shopt -s nocaseglob' dann das Script und er macht trotzdem nur die kleingeschriebenen files.
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.
|