ITunes Lieder exportieren mit rsync und sed

Ich möchte die Lieder, die ich mit ITunes verwalte, auf andere Datenträger exportieren. Mein erstes Ziel war es eine SD Karte auf meinen Blackberry Storm zu benutzen. Man kann das aber natürlich auch mit anderen USB Speichern benutzen. Ich werde es auch benutzen um einen Teil meiner Lieder auf einem Netzwerklaufwerk für VDR oder Sonos bereitzustellen. Als ich anfing, gab es noch kein Synchronisationstool für Mac. Da ich eher ein Linux Kommandozeilen Benutzer bin falle ich bei solchen Problemen reflexartig auf einen Terminal zurück. Zum Glück gibts den auch auf dem Mac ;-)

Diese Vorgehensweise ist zwar etwas rustikal aber da sie plattformunabhängig ist bleibe ich bei Ihr. Ausserdem erlaubt sie mir zwar (etwas umständlich) den Export über Playlisten zu filtern.

Ziel: Ich möchte alle Lieder, ausser denen die auf einer speziellen Playliste drauf sind, in ein anderes Verzeichniss synchronisieren. Ich verwende dazu sed für das Aufbauen der Playlisten und rsync für die Synchronisation.

1. Generieren einer exclude Steuerdatei

Mithilfe einer intelligenten Wiedergabeliste selektiere ich in ITunes auf Basis eines Merkmals alle Lieder, die ich nicht auf meinem Blackbarry (oder anderem Gerät) haben möchte. Diese exportiere ich dann auf den Desktop als exclude.xml

Aus dieser Playliste interessiert mich nur eine Zeile. Die mit dem Pfad und MP3 Dateinamen

 <key>Location</key><string>file://localhost/Users/hagenbauer/Music/iTunes/iTunes%20Music/Led%20Zeppelin/Remasters/2-02%20The%20Rain%20Song.mp3</string>

Mithilfe von grep und sed mache ich jetzt folgendes: Gebe mir alle Zeilen die das wort "Location" enthalten und lösche die "roten Teile" sowie tausche das "%20" gegen ein Leerzeichen aus.

Die sed Kommandos dazu sind

s#<key>Location</key><string>file://localhost/Users/hagenbauer/Music/iTunes/iTunes%20Music/##
s#</string>##
s#%20# #g

Diese Zeilen habe ich in einer Datei hb-sed4exclude-generation. Aufgerufen wird das ganze jetzt in einem Shell script von der Kommandozeile.

hb-xml2exclude.sh

die () {
    echo >&2 "$@"
    exit 1
}

[ "$#" -eq 1 ] || die "1 argument required, $# provided- bitte XML file mit playliste angeben"
grep Location $1 | sed -f hb-sed4exclude-generation | tr -d '\011' > exclude

und so wird dann die exclude Datei gebildet

./hb-xml2exclude.sh ../Desktop/exclude.xml

2. Synchronisiere die Musikdateien

Hier kommt rsync zum Einsatz. Die Logik ist: Synchronisiere mir alles wo sich die Grösse geändert hat ausser die Dateien in der Datei exclude. In das Verzeichniss wo die SD Karte oder das Netzwerklaufwerk gemounted wurde. 

hb-sync2sdcard.sh

rsync -avd --exclude-from=/Users/hagenbauer/tools/exclude --size-only /Users/hagenbauer/Music/iTunes/iTunes\ Music/* /Volumes/MP3PLAYER/BlackBerry/music/

oder

hb-sync2sonos.sh
rsync -avd --exclude-from=/Users/hagenbauer/tools/exclude --size-only /Users/hagenbauer/Music/iTunes/iTunes\ Music/* /Volumes/sonos/

3. Ideen / Wünsche

  • Export der Playliste von ITunes aus einem Script heraus
  • Parametrisieren der Zielverzeichnisse
  • Umwandeln der Playlisten so das sie auch in anderen Umgebungen genutzt werden können.