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

преобразование кодировокНедавно у меня возникла необходимость изменить один из старых разделов диска (ReiserFS), содержащий музыку. Он был создан довольно давно и русские имена файлов хранились в KOI8-R, а сейчас его нужно было преобразовать в юникод. В поисках средств я наткнулся на утилиту convmv (convert move). Разрабатывается она немцами, но и с русскими кодовыми страницами работает исправно.

Утилита написана на Perl, компиляции не требует. Скачиваем, распаковываем, устанавливаем:

wget -c http://www.j3e.de/linux/convmv/convmv-1.14.tar.gz
tar xfz convmv-1.14.tar.gz
cd convmv-1.14
make install

Всё, можно запускать. Для начала “потренируемся на кошках” — возьмём какой-нибудь подопытный каталог:

root@flycat:~# cd /music/test
root@flycat:/music/test# ls
01\ -\ \341\316\324\317\333\313\301.mp3
02\ -\ \344\327\301\ \327\305ӣ\314\331\310\ \307\325\323\321.mp3
03\ -\ \362\331\326\311\312,\ \322\331\326\311\312,\ \313\317\316\317\320\301\324\331\312.mp3
04\ -\ \367\ \324\322\301\327\305\ \323\311\304\305\314\ \313\325\332\316\305\336\311\313.mp3
05\ -\ \376\325\316\307\301\ -\ \376\301\316\307\301.mp3
06\ -\ \360\305\323\305\316\313\301\ \313\322\317\313\317\304\311\314\301\ \347\305\316\331.mp3
07\ -\ \360\305\323\305\316\313\301\ \376\305\302\325\322\301\333\313\311.mp3
08\ -\ \307\317\314\325\302\317\312\ \327\301\307\317\316.mp3
09\ -\ \357\302\314\301\313\301.mp3
10\ -\ \365\314\331\302\313\301.mp3
11\ -\ \360\305\323\305\316\313\301\ \315\301\315\317\316\324\305\316\313\301.mp3
12\ -\ \365\326\301\323\316\317\ \311\316\324\305\322\305\323\316\317.mp3
13\ -\ \360\305\323\305\316\313\301\ \317\ \314\305\324\305.mp3
14\ -\ \353\317\314\331\302\305\314\330\316\301\321\ \315\305\304\327\305\304\311\303\331.mp3
15\ -\ \360\305\323\316\321\ \304\322\325\332\305\312.mp3
16\ -\ \344\317\322\317\326\316\301\321.mp3
17\ -\ \341\ \315\317\326\305\324\ \302\331\324\330\ \327\317\322\317\316\301.mp3
18\ -\ \360\305\323\316\321\ \317\323\314\311\313\301.mp3
19\ -\ \354\317\333\301\304\311\316\301\321\ \320\305\323\316\321.mp3
20\ -\ \363\317\302\301\336\330\321\ \320\305\323\316\321.mp3
21\ -\ \356\301\323\324\317\321\335\311\312\ \304\322\325\307.mp3
22\ -\ \356\305\320\322\311\321\324\316\317\323\324\330\ \334\324\325\ \315\331\ \320\305\322\305\326\311ף\315.mp3
23\ -\ \345\323\314\311\ \304\317\302\322\331\312\ \324\331.mp3
24\ -\ \363\320\321\324\ \325\323\324\301\314\331\305\ \311\307\322\325\333\313\311.mp3

Вот такое безобразие. Пробуем:

root@flycat:/music/test#  convmv -t UTF-8 -f KOI8-R *
Starting a dry run without changes...
mv "./01 - �������.mp3" "./01 - Антошка.mp3"
mv "./02 - ��� ��ӣ��� ����.mp3" "./02 - Два весёлых гуся.mp3"
mv "./03 - �����, �����, ���������.mp3" "./03 - Рыжий, рыжий, конопатый.mp3"
mv "./04 - � ����� ����� ��������.mp3"  "./04 - В траве сидел кузнечик.mp3"
mv "./05 - ����� - �����.mp3"   "./05 - Чунга - Чанга.mp3"
mv "./06 - ������� ��������� ����.mp3"  "./06 - Песенка крокодила Гены.mp3"
mv "./07 - ������� ���������.mp3"       "./07 - Песенка Чебурашки.mp3"
mv "./08 - ������� �����.mp3"   "./08 - голубой вагон.mp3"
mv "./09 - ������.mp3"  "./09 - Облака.mp3"
mv "./10 - ������.mp3"  "./10 - Улыбка.mp3"
mv "./11 - ������� ����������.mp3"      "./11 - Песенка мамонтенка.mp3"
mv "./12 - ������ ���������.mp3"        "./12 - Ужасно .mp3"
mv "./13 - ������� � ����.mp3"  "./13 - Песенка о лете.mp3"
mv "./14 - ����������� ���������.mp3"   "./14 - Колыбельная медведицы.mp3"
mv "./15 - ����� ������.mp3"    "./15 - Песня друзей.mp3"
mv "./16 - ��������.mp3"        "./16 - Дорожная.mp3"
mv "./17 - � ����� ���� ������.mp3"     "./17 - А может быть ворона.mp3"
mv "./18 - ����� ������.mp3"    "./18 - Песня ослика.mp3"
mv "./19 - ��������� �����.mp3" "./19 - Лошадиная песня.mp3"
mv "./20 - ������� �����.mp3"   "./20 - Собачья песня.mp3"
mv "./21 - ��������� ����.mp3"  "./21 - Настоящий друг.mp3"
mv "./22 - ������������ ��� �� ������ף�.mp3"    "./22 - Неприятность эту мы переживём.mp3"
mv "./23 - ���� ������ ��.mp3"  "./23 - Если добрый ты.mp3"
mv "./24 - ���� ������� �������.mp3"    "./24 - Спят усталые игрушки.mp3"
mv "./�����������"      "./Колыбельные"
No changes to your files done. Use --notest to finally rename the files.

Похоже, всё в порядке. Можно конвертировать (добавляем ключ –notest):

root@flycat:/music/test# convmv -t UTF-8 -f KOI8-R --notest *
mv "./01 - �������.mp3" "./01 - Антошка.mp3"
mv "./02 - ��� ��ӣ��� ����.mp3" "./02 - Два весёлых гуся.mp3"
mv "./03 - �����, �����, ���������.mp3" "./03 - Рыжий, рыжий, конопатый.mp3"
mv "./04 - � ����� ����� ��������.mp3"  "./04 - В траве сидел кузнечик.mp3"
mv "./05 - ����� - �����.mp3"   "./05 - Чунга - Чанга.mp3"
mv "./06 - ������� ��������� ����.mp3"  "./06 - Песенка крокодила Гены.mp3"
mv "./07 - ������� ���������.mp3"       "./07 - Песенка Чебурашки.mp3"
mv "./08 - ������� �����.mp3"   "./08 - голубой вагон.mp3"
mv "./09 - ������.mp3"  "./09 - Облака.mp3"
mv "./10 - ������.mp3"  "./10 - Улыбка.mp3"
mv "./11 - ������� ����������.mp3"      "./11 - Песенка мамонтенка.mp3"
mv "./12 - ������ ���������.mp3"        "./12 - Ужасно интересно.mp3"
mv "./13 - ������� � ����.mp3"  "./13 - Песенка о лете.mp3"
mv "./14 - ����������� ���������.mp3"   "./14 - Колыбельная медведицы.mp3"
mv "./15 - ����� ������.mp3"    "./15 - Песня друзей.mp3"
mv "./16 - ��������.mp3"        "./16 - Дорожная.mp3"
mv "./17 - � ����� ���� ������.mp3"     "./17 - А может быть ворона.mp3"
mv "./18 - ����� ������.mp3"    "./18 - Песня ослика.mp3"
mv "./19 - ��������� �����.mp3" "./19 - Лошадиная песня.mp3"
mv "./20 - ������� �����.mp3"   "./20 - Собачья песня.mp3"
mv "./21 - ��������� ����.mp3"  "./21 - Настоящий друг.mp3"
mv "./22 - ������������ ��� �� ������ף�.mp3"    "./22 - Неприятность эту мы переживём.mp3"
mv "./23 - ���� ������ ��.mp3"  "./23 - Если добрый ты.mp3"
mv "./24 - ���� ������� �������.mp3"    "./24 - Спят усталые игрушки.mp3"
mv "./�����������"      "./Колыбельные"

Проверяем:

root@flycat:/music/test# ls
01\ -\ Антошка.mp3                    08\ -\ голубой\ вагон.mp3          15\ -\ Песня\ друзей.mp3           22\ -\ Неприятность\ эту\ мы\ переживём.mp3
02\ -\ Два\ весёлых\ гуся.mp3         09\ -\ Облака.mp3                  16\ -\ Дорожная.mp3                23\ -\ Если\ добрый\ ты.mp3
03\ -\ Рыжий,\ рыжий,\ конопатый.mp3  10\ -\ Улыбка.mp3                  17\ -\ А\ может\ быть\ ворона.mp3  24\ -\ Спят\ усталые\ игрушки.mp3
04\ -\ В\ траве\ сидел\ кузнечик.mp3  11\ -\ Песенка\ мамонтенка.mp3     18\ -\ Песня\ ослика.mp3           Detskie\ pesni\ v\ mp3/
05\ -\ Чунга\ -\ Чанга.mp3            12\ -\ Ужасно\ интересно.mp3       19\ -\ Лошадиная\ песня.mp3        Колыбельные/
06\ -\ Песенка\ крокодила\ Гены.mp3   13\ -\ Песенка\ о\ лете.mp3        20\ -\ Собачья\ песня.mp3
07\ -\ Песенка\ Чебурашки.mp3         14\ -\ Колыбельная\ медведицы.mp3  21\ -\ Настоящий\ друг.mp3

Теперь можно запускать на всей файловой системе. Для этого используется ключ -r (рекурсивный обход всех каталогов). Утилита достаточно умна и распознаёт уже сконвертированные в UTF-8 файлы и каталоги, поэтому можно не заморачиваться о проблеме двойной конфертации.

Всех заинтересовавшихся отсылаю за подробностями к man

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *