Накидал какое-то рабочее решение.
Должно работать с разными именами файлов в текущей директории, главное чтобы в файле был только один кусок с числом.
То есть с таким набором файлов справится: file1.jpg file02.jpg file0035.jpg 36file.jpg, лишь бы числа не пересекались
А с таким - НЕ справится: file1_1.jpg 01_file_02.jpg
max=$(ls -1 | grep -oP "[0-9]*"|sort -n|tail -n1)
length=$(sed "s/^0*//g"<<<"$max"|xargs expr length)
echo "Max number found: [$max], max length: [$length]"
ls -1|while read oldname; do
oldnum="$(grep -oP "[0-9]*"<<<"oldname")"
newnum=$(printf "%0${length}d" $(sed "s/^0*//g"<<<"$oldnum"))
newname=$(sed "s/$oldnum/$newnum/g"<<<"$oldname")
if [ -f "$newname" ]; then
echo "Kinly check the following files manually: $oldname $newname"
else
echo "Renaming [$oldname] to [$newname]"
# mv "$oldname" "$newname"
done
p.s. после проверки вывода, расскомментировать строчку с "# mv "