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

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

Недавно появилась необходимость массово переименовать большое количество файлов в транслит. После недолгих поисков нашел очень интересный 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 Комментариев: 3
Метки : ,

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

Webmoney Z163628999150, R61715184597

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

  • Volkoff Roman

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

    «$0»

    cd ...

    переделал в

    «.../$0»

    cd ...

  • некто

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

  • Fedor

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


Leave a reply

;) :| :x :twisted: :) 8O :( :roll: :P :oops: :o :mrgreen: :lol: :idea: :D :evil: :cry: 8) :arrow: :? :?: :!:

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