waltermattau
Newbie
Hallo,
folgende Ausgangssituation: Ich habe eine Vielzahl von mp3-Ordnern
in welchen die Audiofiles selbst in folgendem Dateiformat abgelegt sind.
Songtitel.mp3
z.B.
Das Intro.mp3
Der Zweite Song.mp3
Logischerweise werden die Songs in den Ordnern nach dem Alphabet
sortiert, da keine Songnummern vorranstehen. Dazu liegt in jedem
Ordner eine m3u Playlist, die die korrekte Reihenfolge der Songs enthält.
Ich habe erfolgreich ein Shellskript geschrieben, dass mir aus der
m3u Datei die Dateinamen ausließt und mir Tracknamen mit Track-
nummern (mit führender Null) generiert, so dass die Dateien z.B.
folgendermaßen umbenannt werden.
Das generieren der Namen funktioniert super. Aus der Playlistdatei wird
Zeile für Zeile jeweils ein Track (somit in richtiger Reihenfolge) aus-
gelesen und der erwünschte Dateiname für die Audiodatei erstellt.
Das Problem sind die Leerzeichen in den Dateinamen, die bei einem
mv folgendermaßen angegeben werden müssen (Datei z.B. Hallo
Welt.mp3):
Somit funktioniert zwar das generieren der Dateinamen super aber
das Umbenennen gibt eben Fehlermeldungen aus, da ich innerhalb
des Skripts keine Slashes in den Namen habe, aber für den konkreten
Umbenenn-Befehl diese brauche.
Der Skriptcode:
Meine Fragen:
* Wie kann ich in eine Variable in dem Shellskript ein Leerzeichen mit
einem "\ " vertauschen? Manuell funktioniert dass dann.
Habs mit
probiert, aber da ersetzt
er nur das erste Leerzeichen korrekt.
* Oder gibt es einen Befehl zum umbennenen, wo ich diese Slashes
nicht machen muss?
Vielen, vielen Dank im Vorraus.
folgende Ausgangssituation: Ich habe eine Vielzahl von mp3-Ordnern
in welchen die Audiofiles selbst in folgendem Dateiformat abgelegt sind.
Songtitel.mp3
z.B.
Das Intro.mp3
Der Zweite Song.mp3
Logischerweise werden die Songs in den Ordnern nach dem Alphabet
sortiert, da keine Songnummern vorranstehen. Dazu liegt in jedem
Ordner eine m3u Playlist, die die korrekte Reihenfolge der Songs enthält.
Ich habe erfolgreich ein Shellskript geschrieben, dass mir aus der
m3u Datei die Dateinamen ausließt und mir Tracknamen mit Track-
nummern (mit führender Null) generiert, so dass die Dateien z.B.
folgendermaßen umbenannt werden.
Code:
ich@localhost:~/test> ls *.mp3
A Life in the Day of Benjamin Andre.mp3
Behold a Lady.mp3
Dracula's wedding (feat. Kelis).mp3
God (Interlude).mp3
Good Day, good Sir.mp3
...
ich@localhost:~/test> ./run
Alter Name: The Love Below (Intro).mp3
Neuer Name: 01-The Love Below (Intro).mp3
Alter Name: Love Hater.mp3
Neuer Name: 02-Love Hater.mp3
Alter Name: God (Interlude).mp3
Neuer Name: 03-God (Interlude).mp3
Alter Name: Happy Valentine's Day.mp3
...
Das generieren der Namen funktioniert super. Aus der Playlistdatei wird
Zeile für Zeile jeweils ein Track (somit in richtiger Reihenfolge) aus-
gelesen und der erwünschte Dateiname für die Audiodatei erstellt.
Das Problem sind die Leerzeichen in den Dateinamen, die bei einem
mv folgendermaßen angegeben werden müssen (Datei z.B. Hallo
Welt.mp3):
Code:
mv Hallo/ Welt.mp3 01-Hallo/ Welt.mp3
Somit funktioniert zwar das generieren der Dateinamen super aber
das Umbenennen gibt eben Fehlermeldungen aus, da ich innerhalb
des Skripts keine Slashes in den Namen habe, aber für den konkreten
Umbenenn-Befehl diese brauche.
Der Skriptcode:
Code:
#!/bin/sh
# Wieviele Einträge stehen in der m3u Liste?
anz=$(grep -c .mp3 *.m3u)
count=1
# Durchgehen und Tracknamen n generieren ( n = count )
while [ $count -le $anz ]
do
# Führende Null in Tracknummer einfügen
if [ $count -lt 10 ]; then
trackno=0$count
else
trackno=$count
fi
# Führende Null in Tracknummer eingefügt
# Tracktitel n auslesen
title=$(grep .mp3 *.m3u | head -n $count | tail -n 1)
# Ausgeben des alten und neuen Tracknamens
echo Alter Name: $title
echo Neuer Name: $trackno-$title
# Umbenennen der Datei n
mv $title $trackno-$title
# Hochzählen um mit Datei n+1 fortzufahren
count=$[$count+1] #Zähler um eins erhöhen
# Läuft solange bis die in Zeile 4 ermittelte Trackanzahl erreicht ist
done
exit 0
Meine Fragen:
* Wie kann ich in eine Variable in dem Shellskript ein Leerzeichen mit
einem "\ " vertauschen? Manuell funktioniert dass dann.
Habs mit
Code:
title=${title/ // }
er nur das erste Leerzeichen korrekt.
* Oder gibt es einen Befehl zum umbennenen, wo ich diese Slashes
nicht machen muss?
Vielen, vielen Dank im Vorraus.