Рекурсивное переименование файлов и папок
Добрый день!
Есть несколько тысяч файлов разбросанных по вложенным папкам в /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
вот наколенный рекурсивный скриптик который делает то, что вам нужно. Но в силу своей рекурсивности его нужно либо запускать по полному имени(/home/username/scriptname), либо положить в PATH и запускать по имени.
Работает!
Спасибо!
Всё получилось!
--------------------
A potentia ad actum (лат.)