Para referência, em zsh
, você pode afetar os globs de ordem que são expandidos com o qualificador o
globbing. Por exemplo, *.mp3(om)
classifica por tempo de modificação. Você pode definir sua própria ordem de classificação com funções.
Com *.mp3(o+foo)
, os arquivos são classificados, não com base em seu nome, mas no valor que a função foo
retorna na variável $REPLY
de um determinado nome de arquivo (e foo
recebe o nome do arquivo em $REPLY
também). Então, por exemplo com:
rand() REPLY=$RANDOM
for i in *.mp3(o+rand); do
echo "$i"
done
Você recebe um pedido aleatório.
POSIXly, e se você não quiser fazer suposições sobre quais nomes de arquivos podem conter, você pode fazer algo como:
shuffle() {
awk -v q="'" 'BEGIN {
printf "set --"
for (i=1; i < ARGC; i++) {
r=int(rand()*(ARGC-1)+1);x=ARGV[i];ARGV[i]=ARGV[r];ARGV[r]=x
}
for (i=1;i<ARGC;i++) {
a=ARGV[i];gsub(q, q "\" q q, a);printf " %s", q a q
}
print "";exit}' "$@"
}
eval "$(shuffle *.mp3)"
for i do
echo "$i"
done