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

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

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

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

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

    «$0»

    cd ...

    переделал в

    «.../$0»

    cd ...

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

    «$0»

    cd ...

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

    su

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

    exit

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

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

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

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

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>