Каков наилучший способ выбрать случайный файл из каталога в сценарии оболочки?
Вот мое решение на Bash, но я был бы очень заинтересован в более переносимой (не GNU) версии для использования на собственно Unix.
dir='some/directory'
file=`/bin/ls -1 "$dir" | sort --random-sort | head -1`
path=`readlink --canonicalize "$dir/$file"` # Converts to full path
echo "The randomly-selected file is: $path"
У кого-нибудь есть еще идеи?
Редактировать: lhunath хорошо подходит для анализа ls
. Я думаю, все сводится к тому, хотите ли вы быть портативным или нет. Если у вас есть GNU findutils и coreutils, вы можете сделать:
find "$dir" -maxdepth 1 -mindepth 1 -type f -print0 \
| sort --zero-terminated --random-sort \
| sed 's/\d000.*//g/'
Уфф, это было весело! Также это лучше соответствует моему вопросу, так как я сказал «случайный файл». Честно говоря, в наши дни трудно представить систему Unix, развернутую там с установленным GNU, но не с Perl 5.