Скрипт Bash для добавления случайного числа ко всем файлам - PullRequest
5 голосов
/ 04 июля 2010

У меня есть «умный» телефон, который, похоже, не имеет функции воспроизведения музыки в случайном порядке, поэтому лучше всего написать сценарий bash, в котором все имена файлов в текущем каталоге добавляются случайным образом.

Это сложно сделать?

Ответы [ 6 ]

5 голосов
/ 04 июля 2010

Нет, это не сложно сделать. Однако это испортит ваши тщательно созданные имена файлов, и, возможно, будет трудно отменить.

Вы можете использовать $RANDOM как простой источник случайных чисел в bash. Для тебя случай:

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

Я не проверял это. Вы, вероятно, хотите проверить это самостоятельно на небольшом образец, чтобы убедиться, что вы знаете, что он делает.

4 голосов
/ 05 июля 2010

Этот скрипт будет перетасовывать файлы и перетасовывать их, если они уже были перетасованы.Если вы передадите ему аргумент -u, он отменит перемешивание файлов (удалит случайный префикс).

#!/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

Он использует случайное число с фиксированной шириной из пяти цифр после «1» и сопровождается «9- ", поэтому перемешанные имена файлов имеют вид: 1ddddd9-filename maybe with spaces - and other stuff.1983.mp3.

Если вы повторно запустите скрипт, он перетасует файлы, изменив случайное число в префиксе.

Аргумент -u удалит префикс 1ddddd9-.

Для скрипта требуется Bash> = версия 3.2.

3 голосов
/ 04 июля 2010

Не очень сложно. Что-то вроде:

for i in *; do mv "$i" $RANDOM-"$i"; done
1 голос
/ 20 января 2015

Вот скрипт, который будет работать на OS X и Linux из моего блога.

#!/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 голосов
/ 19 августа 2017

Я знаю, что это довольно старо, но я только что столкнулся с подобной проблемой, и, возможно, это все еще будет полезно. Я только что купил дешевый, но водонепроницаемый MP3-плеер для бега, который отлично работает, за исключением того, что в режиме перемешивания те же самые песни, кажется, продолжают повторяться. На LinuxQuestions.org я нашел несколько инструкций, которые я мог бы изменить для своих нужд, так что вот что я придумал после небольшой проб и ошибок:

Я создал папку с именем Running и поместил туда все мои MP3-файлы из моего списка воспроизведения. (Я прописал название папки, чтобы случайно не удалить его.)

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

Я вызываю скрипт из каталога Running, копирую содержимое из только что созданного каталога running_random в мой MP3-плеер, затем удаляю running_random.

0 голосов
/ 18 января 2014

Благодаря этой оболочке ваша музыкальная библиотека будет воспроизводиться в случайном порядке, без повторения каких-либо песен до тех пор, пока все не будут воспроизведены.История проигранных песен записана в файле ". Sh.his".Эта история сбрасывается автоматически, если вы добавили песню в музыкальную библиотеку или уже прослушали все песни вашей библиотеки, создавая новый случайный список.Всякий раз, когда вы можете сбросить историю, удаляет файл ". Sh.his".

#!/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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...