Каков наилучший способ выбрать случайный файл из каталога в оболочке script?
Вот мое решение в 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.