Eigentlich gehören Leerzeichen nicht unbedingt in Dateinamen, jedoch gibt es sie leider viel zu oft. Also gehen wir einmal von dem folgenden Verzeichnis aus:

$ ls -Q1
"hello-world"
"i love spaces"

Und jetzt versuchen wir es, einmal mit for durch die Dateinamen zu gehen. Doch leider gibt das ein kleines Problem, da for ein Leerzeichen als Trenner sieht.

$ for i in `ls`; do echo $i; done
hello-world
i
love
spaces

Das Problem lässt sich jedoch mit einem einfachen Trick recht leicht lösen. Man nimmt ls und statt einer for– eine while-Schleife als Pipe:

$ ls | while read i; do echo $i; done
hello-world
i love spaces

Zu beachten ist jedoch, dass man den Dateinamen dann auch mit Leerzeichen in der Variable $i hat, weshalb man sie am besten in Anführungszeichen setzt:

ls | while read i; do cp \"$i\" `echo $i | tr " " "_"`; done

Mit diesen Befehlt wären dann auch gleich die Leerzeichen weg und man bräuchte diesen Beitrag nicht mehr :]

Ich bin leicht müde. Wer Rechtschreibfehler oder Sinnlosigkeit findet, darf sie behalten.

[Update] ls ist ein schlechtes Beispiel, denn da gibt es eine viel einfachere Alternative: for i in *; do ....

Advertisements