Ниже дан пример скрипта, который перебирает *.jpg-файлы в текущей директории и переименовывает их сквозной нумерацией. Скрипт корректно обрабатывает файлы с именами, в которых присутствуют пробелы:
#!/bin/bash
n=1
ls -1 *.jpg | while read file
do
echo "Обрабатывается файл: $file"
numName=$(printf %03d $n)
mv -f "$file" $numName.jpg
n=$(($n+1))
done
Следует учитывать, что данный метод может некорректно работать в случае, если пробелы будут в начале или в конце имени файла. Он корректно работает только, если пробелы находяться именно в середине имен файлов.
А чтобы не мучиться с именами файлов с пробелами, можно дать следующую длинную команду, которая переименует все файлы в директории так, что все пробелы в именах файлов будут заменены на подчеркивания:
IFS=$'\n'; for i in $(find $dir -depth -name '* *'); do mv $i $(dirname $i)/$(basename $i| tr ' ' '_'); done
Этот скрипт обсуждается здесь:
https://www.linux.org.ru/forum/development/2978980?cid=2979090
Не совсем понятно, для чего создается переменная IFS, которая в других примерах по даннной ссылке называется как FS. Но команда работает.