Используйте цикл, который проверяет, существует ли имя файла назначения, и увеличивает счетчик, если это так.Замените строку mv
следующим:
prefix="${id1}_{id2}_${dob}_${dop}"
counter=0
while true
do
if [ "$counter" -ne 0 ]
then target="${prefix}_${counter}.pdf"
else target="${prefix}.pdf"
fi
if [ ! -e "$target" ]
then
mv -- "$f" "$target"
break
fi
((counter++))
done
Обратите внимание, что это страдает от проблемы TOCTTOU , если между тестом ! -f "$target"
и mv
создается дубликат файла,Я думал, что можно было бы заменить проверку существования с помощью mv -n
;но хотя это и не перезаписывает файл, он все равно обрабатывает mv
как успешный, поэтому вы не можете проверить результат, чтобы увидеть, нужно ли увеличивать счетчик.