www.bimminger.at

Tipps / Linux

Linux

Dateien zeilenweise abarbeiten (Bsp.: MP3 Playlist)


Irgendwie wollte ich mich wieder mal ein bisschen mit der Konsole spielen und hab mir eine kleine Aufgabe gestellt. Mit einem Shell-Kommando einfach meine MP3-Playlist zu kontrollieren. Dazu mußte ich zuerst die von Winamp erstellte Playlist-Datei (.m3u) zeilenweise auslesen und die einzelnen Einträge kontrollieren. Das ganze Spielchen fand unter cygwin auf meinem Windows-Rechner statt.

Zeilenweises auslesen der Datei


Hier habe ich mich einfach mal für eine while Schleife entschieden.

while read zeile; do echo "zeile: " $zeile; done < meineliste.m3u


Funktioniert ja eigentlich sehr einfach. Die Datei beinhaltet aber pro Eintrag immer ein Zeilenpaar:

#EXTINF:269,Mein Song
\MP3\meinsong.mp3

Die EXTINF-Zeilen möchte ich aber ausblenden. Dazu verwende ich einfach nur alle Zeilen die mit \MP3 beginnen. Also basteln wir eine kleine Pipe:

cat meineliste.m3u | grep -e '^\\MP3.*$' | while read -r zeile; do echo "zeile: " $zeile; done

Bei read ist hier aber der Parameter -r sehr wichtig, damit der Backslash nicht interpretiert sondern ausgegeben wird.

Prüfen ob die Datei existiert


Um zu prüfen ob die Datei existiert habe ich hier einfach test verwendet.

test -f /MP3/meinsong.mp3


Gekoppelt mit einer Ausgabe macht diese Zeile mehr Sinn:

test -f /MP3/meinsong.mp3 && echo "gefunden"


Aber eigentlich benötige ich ja nur eine Liste der ungültigen Einträge also:

test -f /MP3/meinsong.mp3 || echo "Nicht gefunden"

Zusammenführen


So und jetzt führen wir das zeilenweise Abarbeiten der Datei und die Überprüfung zusammen. Da ich mich aber in meiner cygwin-Umgebung befinde, muss ich noch den kompletten Pfad und die Umwandlung des Backslash ("\") in einen Slash ("/") vornehmen. Das Ersetzen übernimmt hier tr und den Pfad /cygdrive/d/ füge ich händisch hinzu:

cat meineliste.m3u | grep -e '^\\MP3.*$' | tr '\\' '/' | while read -r zeile; do ( test -f "/cygdrive/d$zeile" || echo "/cygdrive/d$zeile Nicht gefunden" ) ; done

Das Ergebnis dieser Anweisung ist eine kurze Liste mit allen ungültigen Einträgen aus der MP3-Playlist.

Fazit


Sicher gibt es auch hier einfachere Lösungen, aber ist doch nett wenn man eine derartige Überprüfung mit ein bisschen herumbasteln als Einzeiler vornehmen kann ;-)


Um einen Diskussionsbeitrag zu posten müssen Sie eingeloggt sein.