problem mit leerzeichen und dateiliste
-
ls bekommt dort 1 Argument, das aus dem gesamten Inhalt der Datei besteht; dann wird mit einer hohen Wahrscheinlichkeit etwas wie 'file not found' ausgegeben.
Wenn die Dateien von spitzenbleistift keine Zeilenumbrücke enthält, dann könnte man einfach
eval `echo -n "ls " ;sed 's/\(.*\)/"\1"/' dateiliste`
schreiben, wenn man nur einen ls-Aufruf haben will.
-
Ach Mist, ich weiß nicht wie oft ich jetzt schon sowas in der Art gepostet habe!
-
@Daniel E.:
danke, das funktioniert fuer die datei.leider kann ich jedoch nicht (wie ich das will) mit einer for schleife durch die dateinamen iterieren:
$ for x in `echo "1 2" "3" "4 5"`; do echo $x; done; 1 2 3 4 5 $
Wie kann ich im obigen beispiel die gewuenschte ausgabe(1 2\n3\4 5) erreichen?
-
lass das echo und die ' weg, dann geht s.
eine andere methode um die dateien eines ordners durch zugehen ist folgende_
for entry in /ordner/*; do
xyz
donestatt /ordner/* können auch komplexere regex verwendet werden.
-
Entweder benutzt du statt for eine while Schleife:
echo -e "1 2\n3\n4 5\n" | while read a;do echo $a;done
1 2
3
4 5
Das echo entspricht dem Output von cat. Hierbei wird das echo a in einer Subshell ausgeführt! b=0;echo -e "1 2\\n3\\n4 5\\n" | while read a;do b=a;done;echo "b=$b"
b=0
Nicht b=4 5!!Oder du änderst IFS auf den Zeilenumbruch:
oldifs=$IFS;IFS="\n";for x in `echo -e "1 2\n3\n4 5\n"`; do echo oldifs
1 2
3
4 5IFS wird von oft benutzt! Wenn in deiner Schleife viel gemacht wird solltest du
oldifs=IFS;IFS="\\n";for x in \`echo -e "1 2\\n3\\n4 5\\n"\`; do IFS=oldifs;echo x;IFS="\\n";done; IFS=oldifs
verwenden!Wollte erst das IFS="\n" aus der Schleife rausnehmen, aber das wird doch gebraucht!
[ Dieser Beitrag wurde am 23.04.2003 um 15:27 Uhr von Peanut editiert. ]
-
hey, vielen dank Peanut.
@linux user: dein beispiel funktioniert bei dateinamen mit leerzeichen nicht.
-
cd ~
mkdir bla
touch bla "bla 1" "bla 2" "bla 3" "bla 4"
for file in /~/bla/*; do echo $file; donezeigt bei mir
/~/bla/bla
/~/bla/bla 1
/~/bla/bla 2
/~/bla/bla 3
/~/bla/bla 4
an.tut mir leid, aber das funktioniert.
-
dein beispiel ist fehlerhaft,
aber du hast recht. (sorry)1. for file in *; do echo $file; done
2. for file in `ls *`; do echo $file; done1. spaltet die dateinamen nicht auf. 2. tut es.
das ist uebrigens das "ergebnis":
$ cat wma2mp3 #!/bin/sh for file in *.wma do # echo $file mplayer "$file" -ao pcm -vc null -vo null lame --r3mix audiodump.wav "`basename "$file" .wma`.mp3" && rm audiodump.wav done $
-
was ist an meinem beispiel fehlerhaft?
-
Original erstellt von <linux user>:
was ist an meinem beispiel fehlerhaft?also wenn ich das so in ein xterm paste, laeufts nicht.
so gehts:cd ~
mkdir bla
cd bla
touch "bla 1" "bla 2" "bla 3" "bla 4"
for file in ~/bla/*; do echo $file; done