Von Peter Gerlach am Do, 16. November 2000 um 11:17 #
was soll das denn für ein Befehl sein? Den gibt es im Linux-Anwenderhandbuch nicht, der Kofler kennt das nicht und mein man Hilfesystem kennt das auch nicht. Wird hier noch über Linux geredet? Oder ist das ein Kommando, das Du Dir selbst programmiert hast? Dann kann ich es nämlich lange suchen. :-
Jo, Schleifen an der Shell programmieren sollte jeder Admin schon können. Allerdings sollte er sich auch seiner menschlichen Fehlbarkeit bewusst sein und bei solchen Aktionen die "gefährlichen" Kommandos (hier mv ...) in ein echo einschliessen (echo "mv ..."). Dann erhält man alle Kommandos ausgegeben, wie sie die Shell absetzen würde. Ggf. reichen ja die ersten paar Zeilen, um zu sehen, dass man irgendwo ein Blank zuviel hat...
Von Peter Bossy am Do, 16. November 2000 um 16:20 #
Und was machst Du, wenn Du Leezeichen im Dateinamen hast? Auf dieses Problem wird bei den meisten dieser "Rezepturen" nicht eingegangen. Und dann gehen diese Aktionen in die Hose. Also muß man vorher den IFS (InputFieldSeparator?) manipulieren. Der IFS beinhaltet nämlich standardmäßig newline,space,tab. Und die spaces zerreißen dann den Dateinamen.
Vor der Schleife: OLD_IFS=$IFS IFS=' ' (Das ist kein Schreibfehler. Ich hoffe nur, daß die Quotes ankommen)
Von Peter Bossy am Mi, 22. November 2000 um 17:13 #
>IFS interessiert mich überhaupt nicht Die Shell kann ziemlich perfekt mit Leerzeichen umgehen: > > cat "file with blanks" > cat file\ with\ blanks
Dann führ mal Deine Schleife in einem Unterverzeichnis aus in dem sich Files mit Blanks im Namen befinden. Habe ich selbst schon ausprobiert. Das die Shell die Dateinamen anzeigen kann, weiß ich auch. Aber in einer Schleife wird jeder durch Leerzeichen getrennte Namensteil zum Zählelement.
Wenn die Shell so bescheuert wäre, könnte man sie wegwerfen. Ist sie aber nicht, wie ich gerade nochmal verifiziert habe. Mein Tip funktioniert unter allen Umständen. Man muß allerdings das $i in Anführungszeichen setzen, also "$i", soweit muß ich dir recht geben.
Ja die Shell kann mit Blanks umgehen. Eine For-Schleife über mit find gefundene Liste von Dateinamen mit Blanks , die ich in einer For-Schleife nachbearbeiten wollte, habe ich nur mit dem Tip des IFS hinbekommen. Die Find-Verarbeitung mit find -print0 | xargs -0 ist eine andere Alternative aber damit ist $(basename "$i") nicht so einfach möglich.
Die Alternative wäre das Ergebnis in temporäres File zu schreiben und dann mit READ zeilenweise zu verarbeiten.
Das mit dem IFS finde ich in diesem Fall eleganter.
man mmv
Außerdem ist die for-Schleife flexibler, einfach mv durch ein anderes Kommando ersetzen...
Befehl sein?
Den gibt es im Linux-Anwenderhandbuch nicht,
der Kofler kennt das nicht und mein man Hilfesystem
kennt das auch nicht.
Wird hier noch über Linux geredet? Oder ist das ein
Kommando, das Du Dir selbst
programmiert hast? Dann kann
ich es nämlich lange suchen.
:-
Also muß man vorher den IFS (InputFieldSeparator?) manipulieren.
Der IFS beinhaltet nämlich standardmäßig newline,space,tab. Und die spaces zerreißen dann den Dateinamen.
Vor der Schleife:
OLD_IFS=$IFS
IFS='
'
(Das ist kein Schreibfehler. Ich hoffe nur, daß die Quotes ankommen)
Nach der Schleife:
IFS=$OLD_IFS
Gruß
Peter
cat "file with blanks"
cat file\ with\ blanks
Danke
was mir passiert ist: hab vergessen, den IFS wieder zurückzusetzen, und hab mich dann gewundert, dass ls nicht ging
Dorphion
>
> cat "file with blanks"
> cat file\ with\ blanks
Dann führ mal Deine Schleife in einem Unterverzeichnis aus in dem sich Files mit Blanks im Namen befinden. Habe ich selbst schon ausprobiert.
Das die Shell die Dateinamen anzeigen kann, weiß ich auch.
Aber in einer Schleife wird jeder durch Leerzeichen getrennte Namensteil zum Zählelement.
Gruß
Peter
Die Find-Verarbeitung mit find -print0 | xargs -0 ist eine andere Alternative aber damit ist $(basename "$i") nicht so einfach möglich.
Die Alternative wäre das Ergebnis in temporäres File zu schreiben und dann mit READ zeilenweise zu verarbeiten.
Das mit dem IFS finde ich in diesem Fall eleganter.
touch a-001.jpg a-002.jpg a-003.jpg
rename a- Sept-2004-Mallorca- a-*.jpg
und ls ergibt:
Sept-2004-Mallorca-001.jpg Sept-2004-Mallorca-002.jpg Sept-2004-Mallorca-003.jpg