代码之家  ›  专栏  ›  技术社区  ›  Reinderien

Bash脚本为所有文件预先添加一个随机数

  •  5
  • Reinderien  · 技术社区  · 16 年前

    这很难做到吗?

    6 回复  |  直到 9 年前
        1
  •  7
  •   Benjamin Bannier    16 年前

    不,这不难做到。但是,它会弄乱您精心编制的文件名,并且可能很难撤消。

    $RANDOM 作为bash中随机数的简单来源。为了你的

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

    我没有测试这个。你可能想在一些小的 样品,以确保你知道它做什么。

        2
  •  6
  •   Dennis Williamson    16 年前

    这个脚本将洗牌文件和重新洗牌,如果他们已经洗牌。如果你把它当作 -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
  •  3
  •   zaf    16 年前

    for i in *; do mv "$i" $RANDOM-"$i"; done
    
        4
  •  2
  •   CPrescott    11 年前

    #!/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
    
        5
  •  0
  •   Felipe    12 年前

    通过这个shell,您的音乐库将随机播放,在播放完所有歌曲之前不会重复任何歌曲。 “播放歌曲的历史记录记录在文件中” 如果您向音乐库中添加了一首歌曲,或者已经听过库中的所有歌曲,则会自动重置此历史记录,从而生成一个新的随机列表。只要您愿意,您就可以重置历史记录“正在删除文件” . “他的”。

    #!/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
    
        6
  •  0
  •   user8487664 user8487664    9 年前

    我知道这已经很老了,但我也遇到了类似的问题,也许这仍然有用。我刚买了一个便宜但防水的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\u random目录中的内容复制到MP3播放器中,然后删除Running\u random。

    推荐文章