Hallo zusammen,

im Heimnetzwerk betreibe ich einen älteren Laptop ohne GUI als Minidlna-Server mit Arch64. Da mein TV Gerät die Dateien (hier Links zu Dateien) grundsätzlich alphabetisch sortiert möchte ich diese mit einer vorangestellten, fortlaufenden Nummer versehen, sodaß sich die Sortierung ändert. Dazu habe ich die Links mittels
find `pwd` -iname "*.mp3" -print | sort -R
in eine zufällige Reihenfolge gebracht. Nun wollte ich die Dateien nummerieren.
ls *.mp3 | cat -n | while read n l; do mv "$l" "$n-$l"; done
Leider werden sie auch hiermit am Ende nach ihrer alphabetischen Reihenfolge und nicht nach der zuvor generierten Zufälligkeit sortiert und ich bin genauso nass wie vorher.

In der Manpage von cat kann ich nichts über Sortierungsoptionen finden. Daher wäre ich für Tipps, wie ich das sonst bewerkstelligen könnte sehr erfreut und dankbar.

Danke schon mal fürs Lesen und eventuelle Antworten.

Grüße und schöne Feiertage
Der sort -R Befehl zeigt es ja nur an... wenn du damit weiter arbeiten willst musst du mit | anschließen... stattdessen machst du mit ls einen neuen Befehl und *.mp3 ist wieder alphabetisch.

Anstelle von sort -R bietet sich hier auch der Befehl 'shuf' an.

Wenn du den Dateien eine Zufallsnummer verpassen willst, kannst du das aber z.B. auch mit $RANDOM machen.
for datei in *.mp3
do
    mv -iv "${datei}" "${RANDOM},,${datei}"
done

# beispiel:

renamed 'a,b,c.mp3' -> '6167,,a,b,c.mp3'
renamed 'a,b.mp3' -> '12268,,a,b.mp3'
renamed 'a.mp3' -> '26356,,a.mp3'
Um die Zufallsnummer wieder wegzumachen:
for datei in [0-9]*,,*.mp3
do
    mv -iv "${datei}" "${datei#*,,}"
done

# beispiel:

renamed '12268,,a,b.mp3' -> 'a,b.mp3'
renamed '26356,,a.mp3' -> 'a.mp3'
renamed '6167,,a,b,c.mp3' -> 'a,b,c.mp3'
Die zwei Komma ,, dienen dazu die Zufallsnummer vom Dateinamen eindeutig abzugrenzen.

Da kannst du auch sonst was nehmen, sollte halt nur nicht schon in einem Dateinamen vorkommen.
Nur hast du da schön unterschlagen daß [weitere Bearbeitung] in dem Fall eh wieder eine Schleife while read variable do done ist. Da kann man auch gleich damit anfangen und sich den ganzen anderen Schlamassel sparen 🙂

Lange Pipe|Befehl|Verkettung kann allgemein sehr schnell sehr unübersichtlich werden. Alles in eine Zeile schreiben machts nicht einfacher oder übersichtlicher.
Ein weiterer Ansatz für zufällige Dateinamen wäre sonst noch 'mktemp'. Wenn das ohnehin nur Links wären könnte man sie auch gleich so erstellen.

Ansonsten auch mal schauen ob Playlists (m3u) unterstützt werden.
Ok, erst mal vielen Dank für eure Anregungen und gezielten Vorschlägen.

Um noch mal daruf zurückzukommen worum es mir geht. Vorab sollte ich erwähnen, dass ich nicht allzu viel Ahnung von Bash, Script und Co habe. Die Cracks sehen das sicher schon anhand meines eingangs erwähnten Versuches. Ich schlage mich so durch und mache z.B. systemspezifische Sachen ausschliesslich in der Shell. Sowas wie Thunar-root brauch ich nicht. Wenns dann komplizierter wird, such ich mir was im Netz und versuche das leidlich zu verstehen und umzusetzen.

Wie erwähnt sortiert das TV Gerät grundsätzlich alles was man ihm gibt gnadenlos in eine alphabetische Reihenfolge um. Um dies zu umgehen dachte ich mir eben die Datei- Linknamen mittels vorangestellter Nummerierung so anzupassen, dass ich die alphabetische Buchstabensortierung nach Artist/Titel ausbremsen kann.

Werde dein Beispiel mit $RANDOM testen und mich auch mal mit 'shuf' und mktemp befassen @frostschutz. Und auch deinen Ansatz @niemand werde ich mir zu Gemüte führen. Heute wird das wohl aus Zeitgründen nix mehr werden, aber morgen ist ja auch noch ein Tag.

Bis die Tage, ich wünsch euch was.


EDIT: Playlisten werden leider nicht unterstützt. Deshalb ja der Akt 😉


EDIT 2: Habe aus Zeitmangel jetzt den Vorschlag mit $Random umgesetzt @frostschutz. Die anderen Möglichleiten müssen erst mal warten. Danke für die Hilfe.