Shellskript-Quicktipp: IFS auf Newline setzen

Veröffentlicht am

Ich wollte mir gerade ein kurzes Skript schreiben, das mit Hilfe von LAME alle MP3-Dateien im aktuellen Verzeichnis umkonvertiert. Meine MP3-Dateien haben, durch die entsprechende Einstellung in Banshee, den folgenden Namensaufbau:

Nummer. Titel.mp3

Die Namen enthalten also Leerzeichen – mindestens eins: das nach der Titelnummer und dem anschließenden Punkt. Und das bereitete mir zunächst einmal Probleme. Bis ich es hinbekommen habe, die Variable IFS mit dem Newline-Zeichen zu befüllen…

Hier zunächst einmal mein Skriptchen (als Badenser sollte ich vielleicht besser Skriptle schreiben):

#!/bin/bash
for x in `ls -1 *.mp3`; do
    echo $x
    # do something with lame
done

Das Problem ist nun, dass das echo praktisch für jedes „Wortteil“ ausgeführt wird. Die Dateiliste wird also nicht pro Zeile verarbeitet, sondern nach Leerzeichen getrennt und für jedes Teil dann die Schleife ausgeführt.

Es war klar, dass vor der Schleife IFS gesetzt werden müsste, aber wie? Folgender Versuch scheiterte kläglich:

IFS=\n

Die richtige Variante sieht dann so aus:

IFS=$'\n'

Das ganze Skript sieht also so aus (die LAME-Befehlszeile habe ich mir wieder gespart):

#!/bin/bash
IFS=$'\n'
for x in `ls -1 *.mp3`; do
    echo $x
    # do something with lame
done

Vielleicht wäre ich mit find und der -exec-Option schneller zum Ziel gekommen?! Egal. Möge es euch auch mal hilfreich sein…


Dieser Artikel wurde in der/den Kategorie(n) Programmierung und Skripting veröffentlicht und mit den Tags , versehen.

4 Kommentare zu Shellskript-Quicktipp: IFS auf Newline setzen

  1. Kommentar von gert
    4. Februar 2012, 00:46 Uhr.

    einfach so:

    for x in *.mp3; do
    echo „$x“
    done

    • Kommentar von Gerald
      4. Februar 2012, 08:21 Uhr.

      Ja, richtig :) In dem Fall geht’s auch einfacher. Aber habe IFS = Newline jetzt schon ein paar mal in anderen Situationen gebraucht. Wobei ich natürlich auch nicht ausschließen will, dass man die auch vereinfachen könnte…
      Danke für dein Beitrag. Gruß, Gerald

  2. Kommentar von Martin
    6. Februar 2013, 05:26 Uhr.

    for x in `ls -1 *.mp3`

    Autsch! Das tut ja beim Hinsehen weh.

    Schau dir mal das hier an: http://mywiki.wooledge.org/BashGuide/Practices#Don.27t_Ever_Do_These

  3. Kommentar von Jemand
    16. Oktober 2013, 22:07 Uhr.

    Martin, wenn das beim Hinsehen wehtut, dann vermutlich, weil du nicht richtig hingesehen hast. Der Mann hat Leerzeichen in den Dateinamen, dein Tipp ist hier in der Form also überhaupt nicht hilfreich.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>