Экранирование символа точки в tr-dc

Я пытаюсь переименовать файлы с помощью tr . Следующая команда почти работает:

 for file in ./*; do mv -v "$file" $(echo "$file" | tr ' []' '-' | tr -dc 'A-Za-z0-9_-' | tr '[:upper:]' '[:lower:]'); done 

Однако команда также разделяет символы точек. Итак, этот файл:

Церковь Святого Николая от NE [1235] 1936-08-01.jpg

становится

Стартовые николай-церковь-из-пе – 1235–1936-08-01jpg

Я пробовал различные способы избежать точки, например, используя tr -dc 'A-Za-z0-9\._-' и tr -dc "A-Za-z0-9\._-"

Результат неизменно состоит в том, что каждый символ удаляется. Итак, мой вопрос, как правильно избежать символа точки в tr -dc ?

Просто добавьте точку в «разрешенных символах». Также добавьте символ / (часть пути).

 for f in ./*; do new_f="$( printf "%s" "$f" | tr ' []' '-' | tr -dc 'A-Za-z0-9_./-' | tr '[:upper:]' '[:lower:]')" printf "Would move '%s' to '%s'\n" "$f" "$new_f" done 

Это приводит к

 Would move './St Nicholas' church from NE [1235] 1936-08-01.jpg' to './st-nicholas-church-from-ne--1235--1936-08-01.jpg'