Нужно под Линукс Кубунту 7 перекодировать русские буквы в именах файлов в латиницу.Нашёл в FAQ скрипт ( http://www.opennet.me/docs/RUS/lor_faq/lorFAQ-16.html ) в разделе "16.15 Как перекодировать русские названия файлов в транслит?".
#!/bin/sh
# Перекодирует рекурсивно в текущем каталоге имена
# файлов и каталогов в транслит.
shopt -s nullglob
for NAME in *
do
TRS=`echo $NAME | tr абвгдезийклмнопрстуфхцы abvgdezijklmnoprstufxcy` TRS=`echo $TRS | tr АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ ABVGDEZIJKLMNOPRSTUFXCY` TRS=${TRS//ч/ch}; TRS=${TRS//Ч/CH} TRS=${TRS//ш/sh}; TRS=${TRS//Ш/SH} TRS=${TRS//ё/jo}; TRS=${TRS//Ё/JO} TRS=${TRS//ж/zh}; TRS=${TRS//Ж/ZH} TRS=${TRS//щ/sh\'}; TRS=${TRS//Щ/SH\'} TRS=${TRS//э/je}; TRS=${TRS//Э/JE} TRS=${TRS//ю/ju}; TRS=${TRS//Ю/JU} TRS=${TRS//я/ja}; TRS=${TRS//Я/JA} TRS=${TRS//ъ/\`}; TRS=${TRS//ъ\`} TRS=${TRS//ь/\'}; TRS=${TRS//Ь/\'} if [[ `file -b "$NAME"` == directory ]]; then
mv -v "$NAME" "$TRS"
cd "$TRS"
"$0"
cd ..
else
mv -v "$NAME" "$TRS"
fi
done
Не работает. Говорит:
root@kef:~/cyr-latin-test# ./translit
./translit: 5: shopt: not found
./translit: 8: Syntax error: Bad substitution
1) shopt -s nullglob я догадался под рутом вручную выдать в коммандную строку, nullglob переключилось в on. Непонятно почему в скрипте не срабатывает.
2) В чём дело с "8: Syntax error: Bad substitution" - не понимаю (не знаю). Восьмая строка это TRS=...
Помогите плиз отладить.