Как лучше всего выбрать случайный файл из каталога в сценарии оболочки?
Вот мое решение в 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.
...
будет использоваться $ (...). - person ashawley   schedule 31.03.2009$(…)
находится в POSIX. Если у вас все еще есть оболочка, которая ее не поддерживает, поместите/usr/xpg4/bin
или что-то подобное перед/usr/bin
на вашемPATH
и вызовите/usr/bin/env sh
, а не/bin/sh
. (Или у вас настоящий антиквариат.) - person Gilles 'SO- stop being evil'   schedule 19.07.2011