Переименование файла в linux

Рейтинг: 0Ответов: 2Опубликовано: 06.06.2011

Добрый день.

Нужна помощь: нужно написать скрипт, который заменял бы русские буквы в название файла, не трогая расширения, на английские (хотя бы 3-4 буквы).

Помогите, пожалуйста!

Ответы

▲ 5Принят

Если в расширении файла нет русских букв, то можно воспользоваться следующим методом:

$ echo "привет" | sed 'y/рвт/rvt/'
  пrиvеt

Команда y/ потокового редактора sed заменяет буквы первой группы на соответствующие буквы из второй.

Если этого функционала не хватит, всегда есть tr.

▲ 6

В дополнение к первому ответу.

Если этого функционала не хватит, всегда есть tr.

Нужно учитывать, что tr не поддерживает unicode. Поэтому, если имена файлов в UTF-8, то tr не подойдет.

Команда y/ потокового редактора sed заменяет буквы первой группы на соответствующие буквы из второй.

Если же требуется, заменить одну кириллическую букву на две латинских, то можно воспользоваться командой s. Несколько команд можно перечислить через ;

transliterate.sh

#!/bin/bash

NEW=`echo "$1" | sed '
  y/абвгдезийклмнопрстуфхцыАБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/abvgdezijklmnoprstufhcyABVGDEZIJKLMNOPRSTUFHCY/; 
  s/ё/yo/g; s/ж/zh/g; s/ч/ch/g; s/ш/sh/g; s/щ/shh/g; s/э/je/g; s/ю/ju/g; s/я/ja/g; 
  s/Ё/YO/g; s/Ж/ZH/g; s/Ч/CH/g; s/Ш/SH/g; s/Щ/SHH/g; s/Э/JE/g; s/Ю/JU/g; s/Я/JA/g; 
  s/[ъьЪЬ]//g'`

mv -v $1 $NEW

$ ./transliterate.sh тест «тест» -> «test»

Для пакетного переименования можно воспользоваться командой find

find . -type f -name '*[а-яА-Я]*' -exec ./transliterate.sh {} \;