Linux, Windows — как пакетно переименовать русские имена файлов и папок в транслит?

Дата: 17 марта /

Потребовалось перенести и опубликовать большой архив документов для публикации на сайте, к сожалению все имена файлов в нем были на русском языке, что породило ряд проблем. Решить их помог следующий скрипт, который переименовал все русские файлы и папки в транслит.

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

Скачать архив со скриптом

Для пакетного переименования русских имен файлов и папок в транслит под виндовс было выкачено несколько программ, в итоге после тестирования остановился на следующей:
NovA FileRenamer, скачать ее можно с сайта автора абсолютно бесплатно.

Плюсы — очень шустро работает, имеет функцию как транслитерации так и детранслитерации, т.е. преобразует транслит обратно в русские символы, имеет поддержку регулярных выражений.

Минусы — для себя нашел только один — не умеет рекурсивно переименовывать папки.

Статьи по теме:

  1. Linux, Debian — как рекурсивно подсчитать количество файлов в папке?

Метки: , ,

Рубрика: Linux, Web-разработка

Comments Один комментарий

 

  1. Константин:

    Если нужно еще пробелы переконвертить в подчеркивание, то вот этот же скрипт с маленьким изменением
    http://gist.github.com/353184

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