А если два каталога ./Bin и ./bin?
По ссылке люди много мудрят с регулярными выражениями. Чревато ошибками. Там же - надо читать документацию: что произойдёт при неожиданном отключении электричества, что будет если после переиначивания имени обнаружился уже существующий файл с тем именем. Надо. Читать.

Я бы так сделал - последовательный обход всех уровней каталогов, от малых глубин к большим, пока не случится "ничего не найдено":
#!/bin/bash
declare -r directoryTheTop="${1:-.}"
declare -r tmpFile="$( mktemp )"
trap "rm -f '${tmpFile}'" INT TERM EXIT
echo "Starting at \"${directoryTheTop}\". $( date )" >&2
depthValue=0
while :
do
echo "====> Going at depth ${depthValue}." >&2
while read foundFileOrDir
do
if [ -z "${foundFileOrDir}" ]
then
echo "Job done. $( date )" >&2
exit
fi
dirCurrentlyIsProcessed="$( dirname "${foundFileOrDir}" )"
fileNameSource="$( basename "${foundFileOrDir}" )"
fileNameDestinationAndLowercase="${fileNameSource,,*}"
if [ -e "${fileNameDestinationAndLowercase}" ] \
&& [ "${fileNameSource}" != "${fileNameDestinationAndLowercase}" ]
then
echo "$0 at $LINENO that: already exist '${dirCurrentlyIsProcessed}/${fileNameDestinationAndLowercase}', will skip it." >&2
#echo "$0 at $LINENO that: already exist '${dirCurrentlyIsProcessed}/${fileNameDestinationAndLowercase}', will skip it." > "${tmpFile}"
elif [ "${fileNameSource}" == "${fileNameDestinationAndLowercase}" ]
then
true
else
echo "mv --force \"${dirCurrentlyIsProcessed}/${fileNameSource}\" \"${dirCurrentlyIsProcessed}/${fileNameDestinationAndLowercase}\""
fi
done <<< "$( find "${directoryTheTop}" -mindepth ${depthValue} -maxdepth ${depthValue} )"
echo "----> Leaving depth ${depthValue}." >&2
((depthValue++))
#sleep 2
done
Этот код сохранить в файлик /usr/bin/meAndRename
Сделать:
chown ${USER}:${USER} "/usr/bin/meAndRename"
chmod 755 "/usr/bin/meAndRename"
Правильнее ${USER} заменить на root. Или не класть скрипт в каталог типа '/usr/bin/', который прописан в PATH.
Запускать либо без параметров в каталоге где нужно всё переименовать. Или запускать:
meAndRename "имя/каталога/который/надо/обработать"
Текущий код ничего не делает. Он только пишет на экран предполагаемые команды. Можно сделать:
meAndRename "имя/каталога/который/надо/обработать" 1>/tmp/rename-commands
Изучить "/tmp/rename-commands", если всё нормально - запустить /tmp/rename-commands:
bash /tmp/rename-commands
Дьявол в деталях: если было использовано универсальное имя текущего каталога '.', то /tmp/rename-commands можно запускать только в том каталоге, для которого он был сгенерирован.
Активируется скрипт заменой
echo "mv --force \"${dirCurrentlyIsProcessed}/${fileNameSource}\" \"${dirCurrentlyIsProcessed}/${fileNameDestinationAndLowercase}\""
на
mv --force "${dirCurrentlyIsProcessed}/${fileNameSource}" "${dirCurrentlyIsProcessed}/${fileNameDestinationAndLowercase}"
Предусмотрена фича сброса в лог файл, но деактивирована.
P.S. Я особо не отлаживал. Осторожно.