Рекурсивное переименование файлов и папок

Добрый день!
Есть несколько тысяч файлов разбросанных по вложенным папкам в /mnt/data
У многих из файлов имя в БОЛЬШОМ регистре.
Нужно все файлы и папки сделать маленьком регистре.

Нашёл скрипт

#!/bin/sh
for file in `find /mnt/data/ -print`
do
   mv $file `echo $file | tr [:upper:] [:lower:]`
done

но он не может переименовать все файлы 8(
Дело в том что смена регистра в названии папки делает невозможным переименование вложенных в неё файлов и папок, т.к. сформированные циклом пути с БОЛЬШИМ регистром перестают существовать.
Например:
Сделали из /mnt/data/CONS вот это /mnt/data/cons
И в следующем такте mv уже не сможет работать с файлом /mnt/data/CONS/START.sh, т.к. такого пути больше не существует.

Запуск цикла с ключом -depth может решить проблему,
только если tr [:upper:] [:lower:] будет менять регистр в названии только ПОСЛЕ последнего cлеша, а не весь путь.
Но, к сожалению я плохо понимаю регулярные выражения, а без них expr уже не сможет извлечь нужные мне части пути ДО и ПОСЛЕ последнего слеша.

Помогите кто может

P.S. Работаю в Debian 6, и консольных утилит для смены регистра найти в нём не удалось.
P.P.S. Вопрос решается мгновенно в Total Commander, но это не наш метод. 8)

.

kde-misc/krename

Попробуйте сначала

Попробуйте сначала переименовать все файлы, а затем уже папки. Если папок не тысяча, то их можно и руками.

#!/bin/sh cd "$1" || exit

#!/bin/sh

if test "x$1" = x; then
    exit -1
fi

cd "$1" || exit -1
for n in `find -maxdepth 1 | tail -n +2`; do
    x=`echo "$n" | tr "[:upper:]" "[:lower:]"`
    if test "x$n" != "x$x"; then
	mv -v "$n" "$x"
    fi
done

for n in `find -maxdepth 1 -type d | tail -n +2`; do
    echo "$0" "$n"
    "$0" "$n"
done

вот наколенный рекурсивный скриптик который делает то, что вам нужно. Но в силу своей рекурсивности его нужно либо запускать по полному имени(/home/username/scriptname), либо положить в PATH и запускать по имени.

Работает!

Спасибо!
Всё получилось!

--------------------
A potentia ad actum (лат.)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".