[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