2010-07-04 6 views
5

Ich habe ein "intelligentes" Telefon, das keine Musik-Shuffle-Funktion zu haben scheint, also ist das nächstbeste, ein Bash-Skript zu schreiben, um alle Dateinamen im aktuellen voranzustellen Verzeichnis mit einer Zufallszahl.Bash-Skript, um allen Dateien eine Zufallszahl voranzutreiben

Ist das schwierig zu tun?

+0

könnte die Vorschläge unten durch '\' printf% 05d $ RANDOM \ '-" $ i "' zuerst –

Antwort

5

Nein, das ist nicht schwer zu tun. Es wird jedoch Ihre sorgfältig gestalteten Dateinamen durcheinander bringen, und es könnte schwierig sein, sie rückgängig zu machen.

Sie können $RANDOM als eine einfache Quelle von Zufallszahlen in bash verwenden. Für Ihre Fall:

#!/bin/bash 
for file in *; do 
    mv "$file" $RANDOM-"$file" 
done 

Ich habe das nicht testen. Wahrscheinlich möchten Sie dies selbst auf einem kleinen Sample testen, um sicherzugehen, dass Sie wissen, was es tut.

+4

ausführen, auch nicht mehr als einmal auf eine bestimmte Reihe von Dateien ausführen, oder es wird eine andere Nummer voranstellen. Nichts wie "1413-426-234235-2-NeverGonnaGiveYouUp.mp3". – cHao

+0

@CHao: Genau. Der gesamte Ansatz zum Verschieben der Dateien ist kaputt. Wenn er Softlinks in einem bestimmten Verzeichnis verwenden könnte und es einfach entfernen würde, sobald er fertig ist. Nicht sicher, ob sein Dateisystem das kann. –

+0

Leider habe ich keinen Zugriff auf Dinge wie Links, da es nur ein FAT-System ist. Glücklicherweise sind die Dateinamen mehr oder weniger bedeutungslos, da die wichtigen Dinge in ID3-Tags sind. – Reinderien

3

Nicht wirklich schwierig. Etwas wie:

for i in *; do mv "$i" $RANDOM-"$i"; done 
4

Dieses Skript mischt Dateien und mischt sie neu, wenn sie bereits gemischt wurden. Wenn Sie ein Argument von -u übergeben, werden die Dateien unshuffle (entfernen Sie das zufällige Präfix).

#!/bin/bash 
for file in *.mp3 
do 
    if [[ -d $file ]] 
    then 
     continue # skip directories 
    fi 
    if [[ $file =~ ^1[0-9]{5}9-(.*).mp3$ ]] # get basename 
    then 
     name=${BASH_REMATCH[1]}    # of a previously shuffled file 
    else 
     name=${file%.mp3}      # of an unshuffled file 
    fi 
    if [[ $1 != -u ]] 
    then 
     mv "$file" "1$(printf "%05d" $RANDOM)9-$name.mp3" # shuffle 
    else 
     if [[ ! -e "$file.mp3" ]] 
     then 
      mv "$file" "$name.mp3"       # unshuffle 
     fi 
    fi 
done 

Es verwendet eine feste Breite fünfstellige Zufallszahl nach einer „1“, gefolgt von „9-“ so die gemischten Dateinamen der Form sind: 1ddddd9-filename maybe with spaces - and other stuff.1983.mp3.

Wenn Sie das Skript erneut ausführen, werden die Dateien neu gemischt, indem die Zufallszahl im Präfix geändert wird.

Das Argument -u entfernt das Präfix 1ddddd9-.

Das Skript erfordert Bash> = Version 3.2.

0

Durch diese Shell wird Ihre Musikbibliothek nach dem Zufallsprinzip abgespielt, ohne irgendwelche Lieder zu wiederholen, bis alle wiedergegeben wurden. Die Geschichte der gespielten Songs wird in der Datei ". Sh.his" aufgezeichnet. Dieser Verlauf wird automatisch zurückgesetzt, wenn Sie der Musikbibliothek einen Titel hinzugefügt oder bereits alle Titel Ihrer Bibliothek angehört haben, wodurch eine neue Zufallsliste erstellt wurde. Wann immer Sie möchten, können Sie den Verlauf zurücksetzen, indem Sie die Datei ". Sh.his" löschen.

#!/bin/bash 

#-----------------------------------INFO---------------------------------------------------------- 

#Through this shell, your music library will be played randomly, without repeating any songs until all have been played. 
#The history of songs played is recorded in the file "*. Sh.his". 
#This history is reset automatically if you added a song to the music library or have already heard all the songs of your library, 
#generating a new random list ever. Whenever you want you can reset the history is deleting the file "*. Sh.his". 

#Press "q" to skip song 
#Press "p" to pause song and resume song 

#------------------------------CONFIGURATION------------------------------------------------------ 

#mplayer package needed (For debian/Ubuntu/Mint: "$ apt-get install mplayer") 

#Select your music library path (all recursive folders will be included in the .mp3 files search): 
path="/media/Datos/Música/Music/" 

#------------------------------------------------------------------------------------------------- 

while true 
do 

cadena=$(find "$path" -iname '*.mp3')         #search media files 
nmedia=$(echo "$cadena" | wc -l) 

if [ -f "$0.his" ]           #file exist 
then 
    value=$(<"$0.his")          #read file 

    if [[ ($(echo "$value" | sed -n 1p) != $nmedia) || ($(echo "$value" | sed -n 2p) == 0) ]] #reset file conditions 
    then 
     listrand=$(seq 1 $nmedia | shuf) 
     index=$nmedia 
    else            #no reset file conditions 
     nmedia=$(echo "$value" | sed -n 1p) 
     index=$(echo "$value" | sed -n 2p) 
     listrand=$(echo "$value" | sed -n 3p) 
     listrand=$(echo "$listrand" | sed s/" "/\\n/g) 
    fi 

else             #file not exist 
    listrand=$(seq 1 $nmedia | shuf) 
    index=$nmedia 
fi 

nrand=$(echo "$listrand" | sed -n "$index"p)        #select random number 
cadena=$(echo "$cadena" | sed -n "$nrand"p)        #select song with random number 
index=$((index-1))           #write file 
echo $nmedia > "$0.his" 
echo $index >> "$0.his" 
echo $listrand >> "$0.his" 
mplayer "$cadena"           #play media file 

done 
exit 0 
+0

Obwohl das interessant ist, hat es wenig mit der Frage zu tun - Dateien umbenennen, keine Musik abspielen. – Reinderien

1

Hier ist ein Skript, das auf OS X und Linux von meinem Blog laufen wird.

#!/bin/bash 
# 
# FILE: 
# prepend_random_num.sh 
# ABOUT: 
# Prepends a random number between 1-65000 and an underscore to all files of specified type 
# Runs on Mac OSX & Linux 
# EXAMPLE: 
# $ ls 
# a.jpg b.jpg 
# $ sh prepend_random_num.sh jpg 
# $ ls 
# 138_b.jpg 8474_a.jpg  

for file in *.$1 
do 
    rand=$(jot -r 1 1 65000 || shuf -i 1-65000 -n 1) 
    mv "$file" "$rand"_"$file" 
done 
0

Ich weiß, das ist ziemlich alt, aber ich war gerade mit einem ähnlichen Problem konfrontiert, und vielleicht wird das immer noch nützlich sein. Ich habe gerade einen billigen, aber wasserfesten MP3-Player zum Laufen gekauft, der funktioniert, außer dass im Shuffle-Modus die gleichen paar Songs sich immer wieder zu wiederholen scheinen. Ich fand einige Anweisungen auf LinuxQuestions.org, die ich für meine Bedürfnisse ändern konnte, also hier ist, was ich nach ein wenig Versuch und Irrtum kam:

Ich erstellte einen Ordner namens Running und legte alle meine MP3s aus meiner laufenden Wiedergabeliste in dort. (Ich habe den Ordnernamen großgeschrieben, damit ich ihn nicht versehentlich lösche.

)
#!/bin/bash 
mkdir ../running_random 
for fname in *.mp3 
do 
     cp "$fname" ../running_random/$RANDOM."$fname".mp3 
done 

nenne ich das Skript aus dem Innern des Lauf Verzeichnis, kopieren Sie den Inhalt aus dem neu erstellten running_random Verzeichnis zu meinem MP3-Player, dann lösche ich running_random.

Verwandte Themen