bash: изменить часть имени файла на нижний регистр

#bash #replace #file-rename #uppercase #lowercase

#bash #заменить #файл-переименовать #верхний регистр #нижний регистр

Вопрос:

Мне нужно переименовать список файлов, изменив любое расширение файла на нижний регистр: ie: от My_TEST.ONE.two.Three.fOuR.FIve до My_TEST.one.two.three.four.five

На данный момент я нашел такой способ

 #!/bin/bash

sourcefilename="My_TEST.ONE.two.Three.fOuR.FIve"
newfilename=""
for word in $(echo $sourcefilename | tr '.' 'n'); do
        if [ -z "$newfilename" ]; then
                newfilename="$word"
        else
                newfilename="$newfilename.$(echo $word | tr [:upper:] [:lower:])"
        fi
done
 

Есть ли лучший (и, возможно, элегантный) подход?

Ответ №1:

Используйте функции bash расширения параметров.

 fileName='My_TEST.ONE.two.Three.fOuR.FIve'
first="${fileName%%.*}"
rest="${fileName#*.}"
echo mv -v "${fileName}" "${first}.${rest,,[A-Z]}"