[linux-l] doofes bash problem

Axel Burkhardt linux-lists at burgi.de
Mi Feb 16 14:02:22 CET 2005


Frank Schubert wrote:

>Zitat von Axel Burkhardt <linux-lists at burgi.de>:
>
>  
>
>>Hallo allerseits,
>>
>>
>>ich will in einem Verzeichnis und allen Unterverzeichnissen Dateien, die 
>>auf .txt enden finden und mit ihnen irgendwas machen.
>>
>>for foo in `find . -name "*txt"`; do echo $foo; done;
>>
>>macht aber Zicken bei Namen, die Leerzeichen enthalten. Die Datei
>>
>>text datei mit leerzeichen.txt
>>
>>wird einfach zerlegt und dann kommt so was
>>
>>burgi at burgi:~/tmp$ for foo in `find . -name "*txt"`; do echo $foo; done;
>>./text
>>datei
>>mit
>>leerzeichen.txt
>>
>>dabei raus. Zum weiterverarbeiten unbrauchbar. Hat jemand einen Tipp?
>>
>>    
>>
>Was passiert bei "`find . -name "*txt"`"
>
>?
>
>  
>
Der Dateiname wird korrekt ausgegeben.
Zum Beispiel

burgi at burgi:~/tmp$ echo `find . -name "*txt"`
./text datei mit leerzeichen.txt

Aber die "for" - Schleife scheint das Problem zu sein. Drum hilft auch kein

find . -name "*txt" -exec echo {} \;

in der Schleife - auch hier wird die Variable $foo falsch gesetzt; 
logischerweise tut ein echo "$foo" das Problem ebensowenig lösen.
Das brachte mich aber auf die Idee, die Leerzeichen schon im find 
wegzuescapen.
Aber

for foo in `find . -name "*txt" -exec echo {} | sed --expression="s/ /\\ 
/g" \; `; do echo "$foo"; done;

führt leider zu einem Fehler: "Fehlendes Argument für "-exec"."

Weiss jemand warum? Oder soll ich das doch lieber gleich in Perl 
schreiben ;)

Grüsse

Axel




Mehr Informationen über die Mailingliste linux-l