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.