Необходимо было сегодня переименовать файлы и каталоги в транслит. Поиски готового скрипта не увенчались успехом. Почему-то ни один из найденных мною вариантов не хотел запускаться. Немного подправив найденные варианты получил работоспособный скрипт, который переводит в транслит названия файлов и каталогов, а также заменяет пробел и комбинацию «_-_» на символ подчёркивания. Ниже содержимое скрипта:
#!/bin/bash
# Перекодирует рекурсивно в текущем каталоге имена
# файлов и каталогов в транслит.
SCRIPT=`readlink -e $0`
for NAME in *
do
LAT="$(echo $NAME | sed y/абвгдеёзийклмнопрстуфхцы/abvgdeezijklmnoprstufxcy/)"
LAT="$(echo $LAT | sed y/АБВГДЕЁЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEEZIJKLMNOPRSTUFXCY/)"
LAT="$(echo $LAT | sed s/ч/ch/g)"
LAT="$(echo $LAT | sed s/Ч/CH/g)"
LAT="$(echo $LAT | sed s/ш/sh/g)"
LAT="$(echo $LAT | sed s/Ш/SH/g)"
LAT="$(echo $LAT | sed s/ж/zh/g)"
LAT="$(echo $LAT | sed s/Ж/ZH/g)"
LAT="$(echo $LAT | sed s/щ/sh\'/g)"
LAT="$(echo $LAT | sed s/Щ/SH\'/g)"
LAT="$(echo $LAT | sed s/э/je/g)"
LAT="$(echo $LAT | sed s/Э/JE/g)"
LAT="$(echo $LAT | sed s/ю/ju/g)"
LAT="$(echo $LAT | sed s/Ю/JU/g)"
LAT="$(echo $LAT | sed s/я/ja/g)"
LAT="$(echo $LAT | sed s/Я/JA/g)"
LAT="$(echo $LAT | sed s/ъ/\`/g)"
LAT="$(echo $LAT | sed s/Ъ/\`/g)"
LAT="$(echo $LAT | sed s/ь/\'/g)"
LAT="$(echo $LAT | sed s/Ь/\'/g)"
# Заменить символ пробела на символ подчёркивания
LAT="$(echo $LAT | sed s/\\s/_/g)"
LAT="$(echo $LAT | sed s/_-_/-/g)"
if [[ `file -b "$NAME"` == directory ]]
then
mv -v "$NAME" "$LAT"
cd "$LAT"
bash "$SCRIPT"
cd ..
else
mv -v "$NAME" "$LAT"
fi
done
Скрипт можно скачать и поместить в тот каталог, содержимое которого необходимо переименовать. Остаётся только запустить его из консоли командой ./to-translit.sh или bash to-translit.sh.
#!/bin/bash
# Перекодирует рекурсивно в текущем каталоге имена
# файлов и каталогов в транслит.
SCRIPT=`readlink -e $0`
for NAME in *
do
LAT="$(echo $NAME | sed y/абвгдеёзийклмнопрстуфхцы/abvgdeezijklmnoprstufxcy/)"
LAT="$(echo $LAT | sed y/АБВГДЕЁЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEEZIJKLMNOPRSTUFXCY/)"
LAT="$(echo $LAT | sed s/ч/ch/g)"
LAT="$(echo $LAT | sed s/Ч/CH/g)"
LAT="$(echo $LAT | sed s/ш/sh/g)"
LAT="$(echo $LAT | sed s/Ш/SH/g)"
LAT="$(echo $LAT | sed s/ж/zh/g)"
LAT="$(echo $LAT | sed s/Ж/ZH/g)"
LAT="$(echo $LAT | sed s/щ/sh\'/g)"
LAT="$(echo $LAT | sed s/Щ/SH\'/g)"
LAT="$(echo $LAT | sed s/э/je/g)"
LAT="$(echo $LAT | sed s/Э/JE/g)"
LAT="$(echo $LAT | sed s/ю/ju/g)"
LAT="$(echo $LAT | sed s/Ю/JU/g)"
LAT="$(echo $LAT | sed s/я/ja/g)"
LAT="$(echo $LAT | sed s/Я/JA/g)"
LAT="$(echo $LAT | sed s/ъ/\`/g)"
LAT="$(echo $LAT | sed s/Ъ/\`/g)"
LAT="$(echo $LAT | sed s/ь/\'/g)"
LAT="$(echo $LAT | sed s/Ь/\'/g)"
# Заменить символ пробела на символ подчёркивания
LAT="$(echo $LAT | sed s/\\s/_/g)"
LAT="$(echo $LAT | sed s/_-_/-/g)"
if [[ `file -b "$NAME"` == directory ]]
then
mv -v "$NAME" "$LAT"
cd "$LAT"
bash "$SCRIPT"
cd ..
else
mv -v "$NAME" "$LAT"
fi
done
Скрипт можно скачать и поместить в тот каталог, содержимое которого необходимо переименовать. Остаётся только запустить его из консоли командой ./to-translit.sh или bash to-translit.sh.