Tinitus
Anmeldungsdatum: 28. September 2009
Beiträge: 51
|
Hallo, ich möchte gerne nach Abarbeitung meines Shellscripts am Ende eine zufällig ausgewählte Datei an einen Player wie z.B. vlc, mplayer übergeben um das Ende der Abarbeitung akustisch anzuzeigen. Die Auswahl soll aus einem Verzeichnis mit z.B. mp3 Dateien zufällig erfolgen. Wie kriegt man so was hin? G. R.
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21725
Wohnort: Lorchhausen im schönen Rheingau
|
Die Googleanfrage nach "bash Datei zufällig auswählen" bringt ca 1 Million deutsche Ergebnisse, einige davon hier im Forum. Da ist doch sicher was für dich dabei.
|
Tinitus
(Themenstarter)
Anmeldungsdatum: 28. September 2009
Beiträge: 51
|
redknight schrieb: Die Googleanfrage nach "bash Datei zufällig auswählen" bringt ca 1 Million deutsche Ergebnisse, einige davon hier im Forum. Da ist doch sicher was für dich dabei.
Hallo, leider nein. Habe schon den Herrn Google befragt. Leider hat nichts so richtig gepaßt. G. R.
|
Antiqua
Anmeldungsdatum: 30. Dezember 2008
Beiträge: 4532
|
Hallo, vlc kennt --random als Option. Also z.B. mit cvlc (das ist der "Fensterlose" also Scriptgeeignete vlc) so: cvlc --random /pfad/zu/den/mp3/*.mp3 Bei mplayer heißt die passende Option -shuffle
mplayer -shuffle /pfad/zu/den/mp3/*.mp3 Du könntest auch statt vlc oder mplayer den mpg123 benutzen, das kennt auch --random
mpg123 --random /pfad/zu/den/mp3/*.mp3 Das steht übrigens alles in den jeweiligen man-Pages, bzw. bei Aufrufen der jewl. Programmes mit --help
|
Tinitus
(Themenstarter)
Anmeldungsdatum: 28. September 2009
Beiträge: 51
|
Hallo, Danke für die Antwort. Leider löst sie mein Problem nicht. Ich möchte ja nur genau eine zufällig ausgewählte Datei abspielen. Oben genannte Beispiele spielen aber alle Files in zufälliger Reihenfolge ab.
Habe jedenfalls beim Stöbern in den Manpages bisher keinen Schalter gefunden, der die Wiedergabe nach einem File unterbricht.
Deshalb meine Frage in diesem Forum 😉 G. R.
|
Antiqua
Anmeldungsdatum: 30. Dezember 2008
Beiträge: 4532
|
Ah.. OK, dann eben so:
zufall=$(for i in /pfad/zu/den/mp3/*.mp3; do echo $i; done |shuf| head -n 1); vlc "$zufall" und wenn dich jetzt noch stört, das der vlc offen bleibt: --play-and-exit regelt das dann 😉
|
dAnjou
Anmeldungsdatum: 8. Oktober 2007
Beiträge: 872
Wohnort: Berlin
|
Antiqua schrieb: zufall=$(for i in /pfad/zu/den/mp3/*.mp3; do echo $i; done |shuf| head -n 1); vlc "$zufall"
KICK IT!
zufall=$(for i in /pfad/zu/den/mp3/*.mp3; do echo $i; done |shuf -n 1); vlc "$zufall"
Möpmöp 🐸
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Und Vorsicht: Quotingproblem ! Der Ansatz ist schon ganz gut (vor allem mit shuffle ist viel eleganter als das selber zu machen), ... aber Deine Version geht ja schon bei einem Leerzeichen im Dateinamen krachen. Wenigstens musst Du die Ausgabe des echo quoten: echo "$i" und dann geht es immer noch krachen, wenn es einen Zeilenvorschub im Dateinamen gibt. Wenigstens die Zeilenvorschübe muss man vor dem shuffle durch "\n" ersetzen und nachher wieder zurückwandeln. Eine ähnliche Problematik hatte ich schon mal in http://forum.ubuntuusers.de/topic/wie-kann-ich-einen-string-mit-escapeten-zeiche/ diskutiert, das wird nicht ganz trivial. (Vielleicht schaffe ich es heute Abend, dazu eine Lösung auszuprobieren) LG, track
|
Antiqua
Anmeldungsdatum: 30. Dezember 2008
Beiträge: 4532
|
dAnjou schrieb:
Möpmöp 🐸
*WAK* Gedankennotiz: man shuf mal lesen 😀
Edit: @track funktioniert hier auch mit Leerstellen ohne Quoting, frag mich nicht warum:
~/mp3/Iron Maiden$ zufall=$(for i in */*.mp3; do echo $i; done |shuf -n 1); mpg123 "$zufall"
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3.
Version 0.59q (2002/03/23). Written and copyrights by Joe Drew.
Uses code from various people. See 'README' for more!
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!
Title : Fear Is The Key Artist: Iron Maiden
Album : Fear Of The Dark Year : 1992
Comment: Genre : Heavy Metal
Directory: Fear Of The Dark/
Playing MPEG stream from 04 - Iron Maiden - Fear Is The Key.mp3 ...
MPEG 1.0 layer III, 128 kbit/s, 44100 Hz stereo
^C
[0:14] Decoding of 04 - Iron Maiden - Fear Is The Key.mp3 finished.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Ja stimmt, einzelne Leerzeichen wirft echo korrekt aus. - Nur wehe, es kommen 2 Leerzeichen hintereinander oder ein TAB. Aber inzwischen habe ich eine wirklich saubere Version zusammengesucht:
var="$(stat --printf "%n\0" */*.mp3 | shuf -n1 -z )" ; mpg123 "$var" Die benutzt Null-terminierte Strings, das ist auf jeden Fall sauber. Da kann an Sonderzeichen kommen was will. (das einzige was dann noch sein könnte, sind Unterverzeichnis-Einträge. Die würden natürlich Fehler liefern. - aber das kommt ja mit einiger Sicherheit nicht vor. Und wenn doch, dann müsste man eben die Liste mit find bauen) track
|
Tinitus
(Themenstarter)
Anmeldungsdatum: 28. September 2009
Beiträge: 51
|
track schrieb: Ja stimmt, einzelne Leerzeichen wirft echo korrekt aus. - Nur wehe, es kommen 2 Leerzeichen hintereinander oder ein TAB. Aber inzwischen habe ich eine wirklich saubere Version zusammengesucht:
var="$(stat --printf "%n\0" */*.mp3 | shuf -n1 -z )" ; mpg123 "$var" Die benutzt Null-terminierte Strings, das ist auf jeden Fall sauber. Da kann an Sonderzeichen kommen was will. (das einzige was dann noch sein könnte, sind Unterverzeichnis-Einträge. Die würden natürlich Fehler liefern. - aber das kommt ja mit einiger Sicherheit nicht vor. Und wenn doch, dann müsste man eben die Liste mit find bauen) track
Hallo, Danke erst mal für Eure Ratschläge. Der oben genannte Codeschnipsel taucht auch in die Unterverzeichnisse ab. Funktioniert also so weit ganz gut. G. R.
|
Tinitus
(Themenstarter)
Anmeldungsdatum: 28. September 2009
Beiträge: 51
|
Hallo, habe jetzt noch mal ein wenig mit dem Shell Script gespielt. Es funktioniert aber nur richtig, wenn sich ein Unterverzeichnis (kann auch leer sein) im Ordner befindet. Ansonsten kommt ein Fehler: | stat: Aufruf von stat für „*/*.mpg“ nicht möglich: Datei oder Verzeichnis nicht gefunden
|
G. Roland
|
illinux
Anmeldungsdatum: 19. Oktober 2007
Beiträge: Zähle...
|
oder so: | ls *.mp3 | shuf -n1 | xargs vlc
|
|
Tinitus
(Themenstarter)
Anmeldungsdatum: 28. September 2009
Beiträge: 51
|
Hallo, das erste Sternchen, sowie der Slash in „*/*.mp3“ war das Problem. Mit *.mp3 klappt es zufriedenstellend. G. Roland
|