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
    done

    statt /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 x;done;IFS=x; done; IFS=oldifs
    1 2
    3
    4 5

    IFS 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; done

    zeigt 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; done

    1. 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


Anmelden zum Antworten