четверг, 3 марта 2011 г.

Транслитерация имен файлов

Бывает, возникают ситуации, когда требуется файлы именованые русскими символами транслитировать в латинские. Особенно это полезно когда необходимо передать файлы в архиве пользователю Windows, сделанном в Ubuntu.
Есть на этот счет различные решения, а для себя я выбрал следующее:
в папке ~/.gnome2/nautilus-scripts нужно создать обычный текстовый файл со следующим скриптом внутри:

#!/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
Имя файлу я присвоил следующее: транслитировать имена файлов в этой папке..
Нужно не забыть установить этот файл исполняемым, и после этого в попуп-меню Наутилуса в разделе сценарии появится меню с именем нашего файла, при выборе которогов текущей папке все файлы с русскими символами будут транлитированы.

Комментариев нет:

Отправить комментарий