Тут нет цикла. Если каждый раз брать 1 рандомный элемент всего списка, то нельзя избежать повторения. Список надо взять один раз и по нему итерироваться:
for filename in $(find ... | shuf)
do
do_something_with "$filename"
done
Но тут могут быть побочные эффекты с пробелами и спецсимволами в именах.
(Зачем в исходном примере было |shuf -n 2|head -n 1 я не знаю, это эквивалент простому |shuf -n 1)