Название темы для самокритики, а дело вот в чем:
- понадобилось переименовать расширения всех мультимедийных файлов на диске с больших букв на маленькие.
Ну не нравится мне такой вид: Антонов.MP3
гораздо лучше смотрится так: Антонов.mp3
Итак задача: найти в текущем каталоге все мультимедийные файлы и переименовать их расширения из ЗАГЛАВНЫХ в прописные символы.
Начал вспоминать, какая команда в беше переименовывает файлы.
И был жутко удивлен открытием - оказывается, в могучий BASH такую команду до сих пор не завезли! :-O
Даже в убогом ДОСе она есть, а тут нет, выкручиваются костылем на основе mv.
Костылем заморачиваться не стал, а нашел приложение, которое занимается переименованием, и которое так и называется - rename
На его основе быстренько накидал «переименователь» (слабонервным просьба отвернуться :-) -
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(BMP)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(JPG)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(JPEG)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(GIF)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(PNG)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(AVI)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(MKV)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(MOV)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(MPG)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(MKV)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(SWF)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(WEBM)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(DIVX)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(MPEG)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(MKA)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(FLV)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(FLAC)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(OGG)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(OGM)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(QT)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(TS)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(ASF)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(WMA)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(WMV)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(WAV)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(PCM)$|$1\L$2|' {} \;
find . -depth -print0 | xargs -0 -n 1 rename -v 's|(.*\.)(AAC)$|$1\L$2|' {} \;
Запустил творение и начал ждать. Однако ожидание затянулось, и оставил процесс на ночь.
Каково же было мое удивление, когда выяснилось, что за 7 часов процесс не только не завершился, а переименовал всего ... 227 найденных BMP-файлов! Т.е. до других расширений даже не добрался.
Это звездец... Начал разбираться в этом rename и насколько понял, он написан на Пёрле, который вызывается для обработки каждого найденного файла.
Тогда переделал скрипт для ускорения, точно не помню, но кажется так, дело давно было -
/usr/bin/perl -w /usr/bin/rename -v s#(.*\.)(PNG)$#$1\L$2#
А как бы поступили вы, если переименовать в Bash?