隨機選擇一個文件

做選擇是很困難的。  有時有這樣的需要,一個目錄下有一大堆想看的文件,不想記住哪個已經看過了、哪個沒有看過,只想快速選擇一個文件,而且每個文件被選中的機會是一樣的。 於是寫了這樣一個BASH腳本。  它的基本思路是先生成文件列表,然後產生一個隨機數,與文件列表的行號對應,把那行打印出來 。


#! /bin/sh
# randomly choose a file
# Yuwen Dai, 13 September, 2012

# Add file types here
FILE_TYPE="*.mp4 *.flv *.mp3"

# Get the total number of files
TOTAL=`ls -l $FILE_TYPE|wc -l`
TOTAL=$((TOTAL-1))

# Get a random number
R=$((${RANDOM}*${TOTAL}/32767))

# create a temp file
FILE_LIST=`mktemp /tmp/rp_XXXX` || (echo "Create tmp file failed"; exit 1)

# attach a number to each file
for i in ${FILE_TYPE};do
    echo ${TOTAL} ${i} >> ${FILE_LIST}
    TOTAL=$((TOTAL-1))
done

# Get the file name
FILE=`grep "^${R} " ${FILE_LIST}|sed -e "s/^${R} //"`

# delete the temp file
rm ${FILE_LIST}

echo starting play file... 
echo ${FILE}
# we got file, use it whatever you want
#exec mplayer "${FILE}"


其中 $RANDOM 是BASH 環境中的一個隨機數,在0到32767之間,然後把它的範圍映射到1至文件數目之間。  在文件列表中加上行號, 隨機數生成後,找到相應的行,然後打印出文件名。  



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章