On Don, 08 Mai 2003 at 02:16 (+0200), David Haller wrote: [...]
Also bitte immer richtig quoten:
[Ausgangssituation wie oben] /tmp/test2 (0)$ for i in *\ *; do \ mv "$i" "`echo \"$i\" | sed 's/ /_/g'`"; done /tmp/test2 (1)$ ls -lb total 0 -rw-r--r-- 1 dh dh 0 May 8 02:12 a_b_c -rw-r--r-- 1 dh dh 0 May 8 02:12 d_e\tf -rw-r--r-- 1 dh dh 0 May 8 02:12 g\th_i -rw-r--r-- 1 dh dh 0 May 8 02:12 j\tk\tl -rw-r--r-- 1 dh dh 0 May 8 02:12 m\nn
Alternativ geht auch:
for i in *\ *; do mv "$i" "$(echo "$i" | sed 's/ /_/g')"; done
Man beachte die "" um das `` bzw. $() und die "" bzw. \"\" um das $i.
Und auch hier wieder meine Standard-Anmerkung (ich sollte mir dafür langsam einen Robot bauen ;-): Diese Konstruktionen brüllen allesamt *Datenverlust!*: jan@k500:~/tmp/leer> touch "a b c" "a b_c" "a_b c" "a_b_c" jan@k500:~/tmp/leer> ls -l insgesamt 0 -rw-r--r-- 1 jan users 0 Mai 9 23:25 a b c -rw-r--r-- 1 jan users 0 Mai 9 23:25 a b_c -rw-r--r-- 1 jan users 0 Mai 9 23:25 a_b c -rw-r--r-- 1 jan users 0 Mai 9 23:25 a_b_c jan@k500:~/tmp/leer> for i in *\ *; do mv "$i" "$(echo "$i" | sed 's/ /_/g')"; done jan@k500:~/tmp/leer> ls -l insgesamt 0 -rw-r--r-- 1 jan users 0 Mai 9 23:25 a_b_c So kann ich natürlich auch meine Festplatten putzen! Also mindestens: for i in *\ *; do mv -i "$i" "$(echo "$i" | sed 's/ /_/g')"; done ^^ Beser ist es immer, die Existenz der Zieldatei vorher abzuprüfen. Jan