Как изменить кодировку имён файлов
2011.06.06
Работая с коллегами, пользующимися альтернативными операционными
системами, :) временами приходится иметь дело с файлами, имена которых
повредились после передачи через Сеть. Моя Debian-система работает на
LANG=ru_RU.UTF-8
, так что самая частая головная боль — это кодировка
cp1251, тяжёлое наследие Windows98 в России.
К моему личному великому удовольствию, в Debian присутствует утилита, которая позволяет изменить кодировку имён файлов, которые уже лежат на вашем жёстком диске. Она называется convmv.
Дополнительно, бывает проблема получить читаемый список файлов на FTP-ресурсах, где выставлена кодировка, отличающаяся от UTF-8. Для Krusader, которым я пользуюсь в качестве FTP-менеджера по умолчанию, всё решается элементарным пунктом меню «Вид» -> «Выбрать кодировку».
convmv to the rescue
Присутствует в репозитариях для squeeze:
# aptitude install convmv
Выполняется достаточно удобно, но, по-моему, контринтуитивно. Удобнее всего все файлы с повреждёнными именами тем или иным образом собрать в одном каталоге и из этого каталога вызвать convmv следующим образом:
convmv -f cp1251 -t UTF-8 *
В случае, если файлы повредились насмерть, то звёздочка может оказаться единственным выходом.
По умолчанию convmv не меняет имена файлов после своего запуска —
только пишет результат, который получится при заданных настройках. Как и
всегда с кодировками, надо тыкать почти наугад, пока на экране не
появится что-то читаемое. :) Для того, чтобы изменение произошло, convmv
надо будет запустить ещё раз с флагом --notest
:
convmv --notest -f cp1251 -t UTF-8 *
При общении с Windows-системами в России самые частые кодировки, которые
будут попадаться, это cp1251
, cp866
и koi8-r
.