Посмотрите мой скрипт
С диапазоном кириллицы проблемы, можно дописать символы в начало
#! /bin/bash
Range="ыщчутрёЁа-яА-Яa-zA-Z0-9._\\n"
find . -name "*[^$Range]*" | while read fOld
do
fNew=$(dirname "$fOld")/$(basename "$fOld" | tr -cs [$Range] "_")
echo "$fOld - $fNew"
# mv $fOld $fNew
done