Порядок файлов, в котором их возвращает find, неспецифецирован, так что что занумеровать файлы ваш скрипт может весьма странным образом.
И, сдаётся мне, в таком варианте ваш скрипт сломается, если в пути к фото есть пробелы.
Отвечая на ваш вопрос:
Замените строку с mv на
DESTINATION=$(printf '%s/%s_%05d' "$dir" "$p" $s)
mv "$i" "$DESTINATION"
Спасибо за помощь. Всё работает. А на счёт пробелов я не стал ничего предпринимать, т.к. их 100% нет.
А на счёт странного переименования, можно добавить поиск по дате, не так ли ?
Пользователь решил продолжить мысль 22 Июля 2013, 20:34:15:
Собственно немного погуглив,я нашёл ответ на свой вопрос:
пивожу цикл for к следующему виду
for i in `find ./ -type f -iname "*.JPG" | xargs ls -tr
И получаем в итоге скрипт вида
#!/bin/bash
IFS=$'\t\n' # поидее помогает при пробелах
p="nikon"
s=1
for i in `find ./ -type f -iname "*.JPG" | xargs ls -tr`
do
dir="$(dirname $i)"
new_name=$(printf '%s/%s_%05d' "$dir" "$p" "$s")
mv "$i" "$new_name".jpg
((s++))
done
В итоге получил скрипт ищущий файлы рекурсивно, сортирующий по дате и переименовывающий найденое по порядку, используя префикс из нулей, но сохраняющий фиксированое колиество символов не зависимо от увеличения номера файла.
Спасибо за внимание.