Недавно у меня возникла потребность переименовать целую группу файлов из кириллицы в транслит (для чтения на моём не русифицированном Palm ), и после недолгого поиска я нашел один интересный скрипт, для которого ниже даю рекомендации по использованию.
1) создадим файл с именем translit.sh в каталоге /usr/bin/. В принципе, имя может быть любым, но будьте внимательны, чтобы оно не совпало с уже используемым в системе. Для этого выполним:
sudo gedit /usr/bin/translit.sh2) в появившимся окне текстового редактора вставим нижеследующий код:
#!/bin/bash
# Перекодирует рекурсивно в текущем каталоге имена
# файлов и каталогов в транслит.
shopt -s nullglob
for NAME in * ; do
TRS=`echo $NAME | sed "y/абвгдезийклмнопрстуфхцы/abvgdezijklmnoprstufxcy/"`
TRS=`echo $TRS | sed "y/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/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
3) закроем редактор, применив изменения
4) установим исполняемые права для файла:
sudo chmod 775 /usr/bin/translit.sh
Теперь, для того, чтобы переименовать все файлы и каталоги внутри какого-то каталога, нам необходимо лишь перейти в него и выполнить команду translit.sh
Пример использования:
/media/m/Books/Художественное/Semenova/FB2$ translit.sh
«Семенова Мария» -> «Semenova Marija»
«Валькирия.fb2» -> «Val'kirija.fb2»
«Ведун.fb2» -> «Vedun.fb2»
«Викинги.fb2» -> «Vikingi.fb2»
«Волкодав» -> «Volkodav»
«1. Волкодав.fb2» -> «1. Volkodav.fb2»
«2. Право на поединок.fb2» -> «2. Pravo na poedinok.fb2»
«3. Истовик-камень.fb2» -> «3. Istovik-kamen'.fb2»
«4. Знамение пути.fb2» -> «4. Znamenie puti.fb2»
«5. Самоцветные горы.fb2» -> «5. Samocvetnye gory.fb2»
«Два короля.fb2» -> «Dva korolja.fb2»
«Кудеяр» -> «Kudejar»
«1. Аленький цветочек.fb2» -> «1. Alen'kij cvetochek.fb2»
«2. Вавилонская башня.fb2» -> «2. Vavilonskaja bashnja.fb2»
«Лебединая дорога.fb2» -> «Lebedinaja doroga.fb2»
«Лебеди улетают.fb2» -> «Lebedi uletajut.fb2»
«Меч мертвых.fb2» -> «Mech mertvyx.fb2»
«Мир Волкодава» -> «Mir Volkodava»
«1. Бусый волк.fb2» -> «1. Busyj volk.fb2»
«2. Там, где лес не растет.fb2» -> «2. Tam, gde les ne rastet.fb2»
«Орлиная круча.fb2» -> «Orlinaja krucha.fb2»
«Пелко и волки.fb2» -> «Pelko i volki.fb2»
«Поединок со змеем.fb2» -> «Poedinok so zmeem.fb2»
«Родная душа. Рассказы о собаках.fb2» -> «Rodnaja dusha. Rasskazy o sobakax.fb2»
«С викингами на Свальбард.fb2» -> «S vikingami na Sval'bard.fb2»
«Те же и скунс» -> «Te zhe i skuns»
«1. Те же и скунс.fb2» -> «1. Te zhe i skuns.fb2»
«2. Те же и скунс - 2.fb2» -> «2. Te zhe i skuns - 2.fb2»
«Хромой кузнец.fb2» -> «Xromoj kuznec.fb2»
«Эгида» -> «JEgida»
«1. Вкус крови.fb2» -> «1. Vkus krovi.fb2»
«2. Заказ.fb2» -> «2. Zakaz.fb2»
«3. Магия успеха.fb2» -> «3. Magija uspexa.fb2»
«4. Преступление без срока давности.fb2» -> «4. Prestuplenie bez sroka davnosti.fb2»
«5. Экстрасенс.fb2» -> «5. JEkstrasens.fb2»
«Год Людоеда.fb2» -> «God Ljudoeda.fb2»
«Дядя Леша.fb2» -> «Djadja Lesha.fb2»
evg@geminga:~/Музыка/Владимир Высоцкий/Visotskii_best$ sh ~/ttt.sh
ОтветитьУдалить/home/evg/ttt.sh: 5: shopt: not found
/home/evg/ttt.sh: 28: Bad substitution
Evg, shopt это команда bash. Возможно, именно sh мог выдать ошибку. Такое бывает.
ОтветитьУдалитьПопробуйте выполнить просто как ~/ttt.sh , установив предварительно исполняемые права файлу, как указано выше.