Пакетное переименование файлов в транслит

Категория: Linux , Администрирование Комментариев: 5

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

Создаем новый файл translit.sh и задаем ему права доступа 755 (делаем его исполняемым). Копируем в него следующий код:

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

Использование
Переходим в папку, в которой находятся файлы, которые нужно переименовать и коммандуем translit.sh. Скрипт рекурсивно пройдется по всем папкам в каталоге и переимеует их в транслит.

Автор: Кто-то   @   10 января 2009 Комментариев: 5
Метки : ,

Поблагодарить автора

Webmoney Z163628999150, R617151845974

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

Комментарии
Авг 3, 2009
17:46
#1 Volkoff Roman :

В таком виде не сработал. Следующие две строки

«$0»

cd ...

переделал в

«.../$0»

cd ...

марта 15, 2010
22:08
#2 некто :

Спасибо, замечательная вещь!

июня 9, 2010
16:55
#3 Fedor :

Помогло с учетом поправки «.../» — Благодарю!

Авг 12, 2011
11:49
#4 Александр :

Следующие две строки

«$0»

cd ...

без ошибок, надо лишь предварительно выполнить

su

mv [имя скрипта] /usr/local/bin/

exit

и запускать скрипт без префикса ./

Это позволит рекурсивно обойти все сабдиректории, а не только один уровень

Ноя 14, 2011
11:39
#5 anonymous :

буква Щ обрабатывается неверно, так как пропущена на 14 строчке

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

Предыдущая запись
«
Следующая запись
»