Hallo, Am Die, 01 Aug 2006, Achim Schäfer schrieb:
Am Dienstag, 1. August 2006 20:32 schrieb David Haller:
Am Die, 01 Aug 2006, Dr. Jürgen Vollmer schrieb:
Am Dienstag, 1. August 2006 11:22 schrieb Jens Strohschnitter: statt der for-Schleife ein while-Schleife benutzen, dann geht's auch mit Leerzeichen
find .... | while read l ; do .... $l ....; done
Bitte
| while read -r f; do ... "$f" ... ; done
^^ ^ ^ verwenden.
Warum? (Ich bin mal wieder neugierig.)
Weil. Immer. Eigentlich sollte man auch gleich noch IFS leeren: | while IFS='' read -r x; do ... [..]
So weit, so gut, aber ein Backslash sollte doch im Normalfall nicht in Dateinamen vorkommen. Oder habe ich etwas anderes nicht bedacht?
Via Escapesequenzen kann man dir was unterjubeln. Und in Dateinamen sind[1] unter Linux nur '/' und ASCII 0 (\0) verboten. Vergleiche z.B.: echo 'a\007b' | while read x; do echo "$x"; done echo 'a\007b' | while read -r x; do echo "$x"; done Wenn Escapesequenzen im Dateinamen vorkommen willst du die auch im $x haben (ein 'File not found' waere noch die angenehmste Nebenwirkung). Und das Quoten der eingelesenen Variable ist sowieso Pflicht. -dnh [1] ausser weiteren Einschraenkungen durch das Dateisystem, auf FAT u.a. Backslash und Doppelpunkt... -- It took us fifteen years and three supercomputers to MacGyver a way to power the gate. -- Samantha Carter, Stargate