Re: FW: Hilfe!: bash und Leer- u. Sonderzeichen in Pfaden
Hallo Martin & Jürgen,
for DIR in */; do cd "$DIR" #... # cd .. done
die Gänsefüßchen um $DIR herum hatte ich natürlich auch schon ausprobiert. Ich hatte im Beispielskript dies nur nicht übernommen. Auch wenn sie dort stehen, wechselt cd NICHT in das jeweilige Verzeichnis, eben weil allen Leerzeichen der/das voranzustellende backslash fehlt. Ebenso bei Apostrophen und was weiss ich noch... Muss ich da mit sed über jeden einzelnen Pfad rüber? Ich kann mir nicht vorstellen, dass das Ganze so schwer umzusetzen ist... Ciao, Marko -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Dienstag, 1. Mai 2007 17:16 schrieb mk-lists@email.de:
Hallo Martin & Jürgen,
for DIR in */; do cd "$DIR" #... # cd .. done
die Gänsefüßchen um $DIR herum hatte ich natürlich auch schon ausprobiert. Ich hatte im Beispielskript dies nur nicht übernommen. Auch wenn sie dort stehen, wechselt cd NICHT in das jeweilige Verzeichnis, eben weil allen Leerzeichen der/das voranzustellende backslash fehlt. Ebenso bei Apostrophen und was weiss ich noch...
Muss ich da mit sed über jeden einzelnen Pfad rüber?
Ich kann mir nicht vorstellen, dass das Ganze so schwer umzusetzen ist...
Ciao, Marko Hmmmm,
-- # erzeuge Verzeichnisse mit Leerzeichen im Namen $ for i in {1,2,3,4,5}; do mkdir "$i $i"; done # sind auch alle da? $ ls -la insgesamt 48 drwxr-xr-x 12 mane users 4096 1. Mai 17:35 . drwxr-xr-x 5 mane users 4096 1. Mai 17:33 .. drwxr-xr-x 2 mane users 4096 1. Mai 17:37 1 1 drwxr-xr-x 2 mane users 4096 1. Mai 17:37 2 2 drwxr-xr-x 2 mane users 4096 1. Mai 17:37 3 3 drwxr-xr-x 2 mane users 4096 1. Mai 17:37 4 4 drwxr-xr-x 2 mane users 4096 1. Mai 17:37 5 5 # dann geh in jedes rein, und schau ob wir auch da sind $ for i in */; do (cd "$i"; pwd); done /home/mane/tmp/cdtest/1 1 /home/mane/tmp/cdtest/2 2 /home/mane/tmp/cdtest/3 3 /home/mane/tmp/cdtest/4 4 /home/mane/tmp/cdtest/5 5 -- tut bei mir, wie man sieht, ich glaube, es fehlt tatsächlich entweder das cd .. oder die Klammern... Wenn ich das ganze nämlich in die Anführungszeichen setze, brauche ich den backslash nicht mehr Gruß Manfred -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
mk-lists@email.de schrieb:
for DIR in */; do cd "$DIR" #... # cd .. done
die Gänsefüßchen um $DIR herum hatte ich natürlich auch schon ausprobiert. Ich hatte im Beispielskript dies nur nicht übernommen. Auch wenn sie dort stehen, wechselt cd NICHT in das jeweilige Verzeichnis, eben weil allen Leerzeichen der/das voranzustellende backslash fehlt. Ebenso bei Apostrophen und was weiss ich noch...
Seltsam!
Muss ich da mit sed über jeden einzelnen Pfad rüber?
Nein!
Ich kann mir nicht vorstellen, dass das Ganze so schwer umzusetzen ist...
martin@martin ~ $ mkdir test martin@martin ~ $ cd test martin@martin ~ $ for i in `seq 1 5`; do mkdir "test $i"; done Alles da: martin@martin ~/test $ ls -l insgesamt 0 drwxr-xr-x 2 martin martin 48 1. Mai 18:08 test 1 drwxr-xr-x 2 martin martin 48 1. Mai 18:08 test 2 drwxr-xr-x 2 martin martin 48 1. Mai 18:08 test 3 drwxr-xr-x 2 martin martin 48 1. Mai 18:08 test 4 drwxr-xr-x 2 martin martin 48 1. Mai 18:08 test 5 Anschauen (ohne der Subshell): martin@martin ~/test $ for DIR in */; do cd "$DIR"; pwd; cd ..; done /home/martin/test/test 1 /home/martin/test/test 2 /home/martin/test/test 3 /home/martin/test/test 4 /home/martin/test/test 5 Tut, was passieren soll. Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Dienstag, 1. Mai 2007 schrieb mk-lists@email.de:
Hallo Martin & Jürgen,
for DIR in */; do cd "$DIR" #... # cd .. done
die Gänsefüßchen um $DIR herum hatte ich natürlich auch schon ausprobiert. Ich hatte im Beispielskript dies nur nicht übernommen. Auch wenn sie dort stehen, wechselt cd NICHT in das jeweilige Verzeichnis, eben weil allen Leerzeichen der/das voranzustellende backslash fehlt. Ebenso bei Apostrophen und was weiss ich noch...
Muss ich da mit sed über jeden einzelnen Pfad rüber?
das mit Leerzeichen ist tückisch. und die for-Schleife der bash trennt halt bei denen. Deshalb: ls | while read DIR do (cd "$DIR"; .... ) done ls gibt den Inhalt hier Zielenweise aus, und read liest immer eine Zeile (incl. aller Leer- und sonstigen Zeichen) ls -1 ist also gar nicht nötig Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Hallo, Am Die, 01 Mai 2007, Dr. Jürgen Vollmer schrieb:
Am Dienstag, 1. Mai 2007 schrieb mk-lists@email.de:
Hallo Martin & Jürgen,
for DIR in */; do cd "$DIR" [..] das mit Leerzeichen ist tückisch. und die for-Schleife der bash trennt halt bei denen.
Nein. Der for-Befehl ist ein builtin und die Dateinamen werden durch Expandierung des * erzeugt, da trennt die Shell nicht! Anders ist es, wenn man einen Befehl zu erzeugen der Liste verwendet, z.B: for DIR in `ls -d */`; do das fällt erwartungsgemäß auf die Schnauze.
Deshalb:
ls | while read DIR do (cd "$DIR"; .... ) done
Ist ok, funktioniert aber nur wenn keine Zeilenumbrüche in Dateinamen vorkommen. -dnh -- So Linus, what are we doing tonight? The same thing we do every night Tux. Try to take over the world! -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (5)
-
David Haller
-
Dr. Jürgen Vollmer
-
Manfred Gahr
-
Martin Ereth
-
mk-lists@email.de