Не идеально эффективно.Предложения приветствуются.
Это подразумевает только однозначную цифру, а эффективность снижается по мере того, как появляется больше, поскольку должна быть какая-то неиспользуемая цифра, но она выбирается случайным образом и не кэширует пропуски зажигания.
printf "%s\n" "1 ("?").jpg" |
while IFS=')(' read a b c
do n=$(($RANDOM%10))
while [[ -e "$a($n)$c" ]]
do n=$(($RANDOM%10))
done
mv "$a($b)$c" "$a($n)$c"
done
Этабудет более эффективным, но не случайным, предпочитая самые низкие доступные слоты.
for ndx in {0..9}
do [[ -e "1 ($ndx).jpg" ]] && used[$ndx]=1 || used[$ndx]=0
done
printf "%s\n" "1 ("?").jpg" |
while IFS=')(' read a b c
do for ndx in {0..9}
do if (( used[$ndx] ))
then continue
else mv "$a($b)$c" "$a($ndx)$c"
used[$b]=0
used[$ndx]=1
break
fi
done
done