Das Problem
Musikstücke auf einer Audio-CD sind in einer bestimmten Reihenfolge gebrannt
und beim Abspielen wird die Musik auch genau in dieser Reihenfolge wiedergegeben.
Soweit so gut.
Sehr wichtig ist die Reihenfolge in Tanzstunden, bei Bühnenauftritten und anderen Anlässen.
Nun haben Sticks und MP3-Player inzwischen die Welt erobert, und da plötzlich gab es Probleme...
Mein über alles geschätzter MP3-Player enthält zwar Gigabytes an Speicher, ist selbst aber kaum größer
als ein Kronenverschluss, hat natürlich kein Display, sondern einfach nur Klickkontakte. Zwar werden
in Foldern (Ordnern) abgelegte MP3-Dateien sauber wiedergegeben, aber von einer gezielten
Dateiauswahl kann natürlich keine Rede sein.
Also kopierte ich meine Musikstücke in der gewünschten Reihenfolge in den Player.
Zunächst war alles prima, aber einige Dateien wollten nicht dahin, wo sie sein sollten.
Das gleiche Problem zeigte sich bei der Verwendung von Sticks und Speicherkarten.
Man könnte zuerst an eine Sortierung z.B. nach Namen denken.
Der naive Versuch, Dateien in titel01.mp3
, titel02.mp3
usw. umzubenennen zeigte keinen Erfolg.
Als Nächstes denkt man natürlich an die Zeitstempel. Davon gibt es mindestens zwei: der Erstellungszeitpunkt und
der letzte Änderungszeitpunkt. Nach einigen Versuchen glaubte ich, dass es der Erstellungszeitpunkt ist.
Verschiedene Kopierverfahren einschließlich mancher Playlist-unterstützter Tools übernehmen leider den Erstellungszeitpunkt
der Originaldateien, nicht den Zeitpunkt der Erstellung der Kopie.
Gelöst?
Bei Verwendung von cp
wird eine Kopie als neue Datei betrachtet und erhält die Erstellungszeit
bei Abschluss des Kopiervorgangs.
Also schnell ein Shellscript verfasst, das die Dateien in der gewünschten Reihenfolge kopiert.
Zunächst schien alles wie gewünscht zu funktionieren. Jedoch beim späteren Anhängen einer weiteren Datei
wurde diese zwar abgespielt - nur nicht wie gewünscht am Ende. Allerdings: meistens klappte es, nur eben nicht immer.
Das Shellscript wurde so erweitert, dass es den Speicher im MP3-Player
(oder den Stick, oder die Karte) komplett löschte und dann alles erneut kopierte.
Es funktionierte immer, nur war ich mit dieser Lösung nicht so richtig glücklich.
Gelöst!
Bis ich bemerkte, wann genau eine anzuhängende Datei nicht ans Ende wollte.
Nämlich dann, wenn ich vorher eine nicht mehr benötigte Datei löschte.
Dann trat die nächste Datei an diese Stelle, und da kam die Klarheit ...
Zunächst ist zu bemerken, dass zu
Folder (oder Ordner) früher
Directory gesagt wurde,
zu Deutsch:
Verzeichnis. Und das ist absolut richtig, denn ein Ordner ist selbst eine Datei,
in der die (eigentlichen) Dateien
verzeichnet sind.
Wer das Shellscriptbuch hat: siehe Seite 89, Abschnitt Die Verzeichnisstruktur
Das kann man sich wie eine Liste vorstellen:
Titel01.mp3
Titel02.mp3
Titel03.mp3
Löscht man Titel02.mp3
, wird die Stelle im Verzeichnis geleert, bleibt aber u.U. erhalten:
Titel01.mp3
Titel03.mp3
Kopiert man nun Titel04.mp3
in den Ordner, landet der unter Umständen auf der nächsten freien Stelle:
Titel01.mp3
Titel04.mp3
Titel03.mp3
Die nächste Datei würde wieder brav am Ende landen.
Hilfsmittel
Die Frage war zunächst, wie bekomme ich Dateien genau in der Reihenfolge angezeigt, wie sie verzeichnet sind?
Ein fast vergessenes Feature von
ls
half weiter, nämlich die Option
-f
.
Im Manual findet man diese Erklärung (Auszug aus
man ls
):
...
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
...
-f do not sort, enable -aU, disable -ls --color
...
Und aus do not sort kann man schlussfolgern: Zeige so an wie physisch abgespeichert.
Nun war es möglich, die wirkliche Reihenfolge der Musikstücke zu erkennen, wie sie der MP3-Player abspielt.
Nach einigen Versuchen zeigte sich, dass Zeitstempel und Dateiname dem Player schnurzegal sind.
Zu beachten:
Die Option
-f
zeigte sich ein bisschen zickig. Um eine spaltenweise Ausgabe zu erhalten, musste ich tippen:
ls -f -1
Ein (normalerweise problemloses) Zusammenziehen zu
ls -f1
brachte ein anderes Ergebnis.
Screenshots
Dateien auf einem Stick:$ ls -l --time-style=posix-long-iso E\:/ | cut -d' ' -f6-
2016-12-05 09:52 BackDown.mp3
2017-01-08 10:49 CATAHOULA.mp3
2015-09-23 08:41 PicnicPolka.mp3
2009-12-31 23:13 WakaWaka2010.mp3
Mit
ls
werden Dateien nach Namen sortiert angezeigt.
Hinter
E\:/
verbirgt sich lediglich der Zugriff auf den Stick.
Der Ausdruck
--time-style=posix-long-iso
sorgt für eine vollständige Anzeige des Zeitstempels.
Die Umleitung am Ende :
| cut -d' ' -f6-
schneidet nur die uninteressanten Zeilenanfänge weg.
Sortierung nach Erstellungszeit:$ ls -ltc --time-style=posix-long-iso E\:/ | cut -d' ' -f6-
2017-01-08 10:49 CATAHOULA.mp3
2016-12-05 09:52 BackDown.mp3
2015-09-23 08:41 PicnicPolka.mp3
2009-12-31 23:13 WakaWaka2010.mp3
Das bewirken die Optionen
-tc
.
(Bei den verwendeten Dateien waren Erstellungszeit und Zeit der letzten Änderung identisch.)
Tatsächliche Reihenfolge, wie sie der MP3-Player wiedergibt:$ ls -f -l --time-style=posix-long-iso E\:/ | cut -d' ' -f6-
2015-09-23 08:41 PicnicPolka.mp3
2017-01-08 10:49 CATAHOULA.mp3
2016-12-05 09:52 BackDown.mp3
2009-12-31 23:13 WakaWaka2010.mp3
Das bewirkt die Option
-f
, am besten als erste Option und separat notieren wie im Beispiel.
Die Reihenfolge ist genau die Folge, in der die Dateien auf den Stick kopiert wurden.