понедельник, 2 февраля 2009 г.

Преобразование кодировки имени файла

Часто бывает, что в системе остаются такие артефакты, как файлы,
имя которых записано в кодировке koi8-r или cp1251.
Обычно такое случается, когда раздел или устройство с которого были скопированы файлы, были смонтированы без указания кодировки, или с указанием неверной кодировки.
Выглядит все это вот так:
# ls
????1 ????3

Чтобы легко и просто переделать имя файла в читабельный вид, можно воспользоваться утилитой convmv.
Если у вас имена файлов в кодировке koi8-r, то перекодировать их можно так:
convmv -t koi8-r -f utf8 * - выведет список файлов в старой и в новой кодировках:

# convmv -f koi8-r -t utf8 *
Starting a dry run without changes...
mv "./����1" "./Файл1"
mv "./����3" "./Файл3"

И если вас это устраивает, добавляем опцию --notest и программа уже реально переименует файлы:

convmv -f koi8-r -t utf8 --notest *

Convmv поддерживает также кучу дополнительных полезных опций:
--list Покажет список поддерживаемых кодировок.
-r Рекурсивно обойти каталоги.
-i Спрашивать о каждом действии (интерактивный режим).
--lower Переделывает имя файла в нижний регистр

convmv -r -f koi8-r -t utf-8 --notest <каталог>

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

При необходимости можно выполнить обратное преобразование:

convmv -r -f utf-8 -t koi8-r <файлы и каталоги>

После проверки вывода команды повторить с ключем --notest. Ключ -r включает рекурсивный обход каталогов.

Переходим в папку с файлами/папками с отличной от системной кодировкой, затем выполняем:
% convmv -f cp1251 -t utf-8 ./
Конвертируем имена из cp1251 в utf-8, вывод этой команды покажет новое имя файла/папки, но не будет переименовывать, если новое имя правильное, то запустим эту же команду с опцией --notest.
Для рекурсивного переименования запускаем convmv с опцией -r.

(Замените koi8-r кодировкой, с которой хотите конвертировать)
# convmv -f koi8-r -t utf-8 filename

Вот пример конвертирования в папке рекурсивно:
convmv -f koi8-r -t utf-8 ./Music --notest -r

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

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