27 ноября 2011 г.

Переименовать файлы в транслит в Ubuntu Linux

Необходимо было сегодня переименовать файлы и каталоги в транслит. Поиски готового скрипта не увенчались успехом. Почему-то ни один из найденных мною вариантов не хотел запускаться. Немного подправив найденные варианты получил работоспособный скрипт, который переводит в транслит названия файлов и каталогов, а также заменяет пробел и комбинацию «_-_» на символ подчёркивания. Ниже содержимое скрипта:

#!/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.

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

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