--- title: UTF8 локаль в ArchLinux tags: archlinux, unicode --- Дизель выложил в свое время замечательную [ссылочку](http://linuxdv.org/forum/viewtopic.php?id=105) на форуме по поднятию UTF8 локали в Arch Linux Здесь я хочу что бы все желающие выдавали свои дополнения, оформенные в виде статьи. Итак, положим начало... --- Имена файлов ------------- На старой koi8-r системе было довольно приличное количество файлов в русскими именами, естественно в кодировке koi8-r. Что делать, в UTF локали с такими именами файлов работать несподручно... На решение проблемы навел запуск такой команды: LANG=ru_RU.KOI8-R ls | iconv -f koi8-r Эта команда вывела список имен файлов с русскими именами как и положено, русскими буковками. Так родился скрипт: #!/bin/bash # # Recode all file names in given codepage to UTF8 # on UTF8 system # CODE_FROM="KOI8-R" recursive=0 scan_only=0 function parse_cmd_line() { prev_arg="" need_next=0 for i in "$@" do if [ $need_next -eq 0 ]; then case $i in "-f") prev_arg="-f" need_next=1 ;; "-r") recursive=1 ;; "-s") scan_only=1 ;; esac else case $prev_arg in "-f") CODE_FROM=`echo $i | tr '[:lower:]' '[:upper:]'` ;; esac prev_arg="" need_next=0 fi done } function recode_file() { old_name="$@" new_name=`echo $@ | iconv -f $CODE_FROM` stat1=$? mid_name=`echo $@ | iconv -f UTF8 2>/dev/null` stat2=$? if [ x"$old_name" != x"$new_name" -a $stat1 -eq 0 -a x"$mid_name" != x"$old_name" ]; then if [ $scan_only -eq 0 ]; then echo "Recode: $old_name -> $new_name" mv "$old_name" "$new_name" else echo `pwd`"$@" fi fi } parse_cmd_line $@ oldIFS=$IFS IFS=$'\n' files=`ls -1 --color=none` for i in $files do if [ -d "$i" ]; then if [ $recursive -eq 1 ]; then name=`basename $0` if [ `dirname $0` == "." ]; then prefix=`pwd` else prefix=`dirname $0` fi cd "$i" $prefix/$name "$@" cd .. fi fi recode_file "$i" done Запускам сей скрипт из директории содержимое которой нужно привести к виду UTF8: recodedir Скрипт понимает ключи: * **-r** говорит что перебрать все каталоги рекурсивно, начиная с текущего * **-s** просканирует каталоги и выдаст список файлов которые нужно изменять * **-f <кодировка>** задает кодировку из которой перекодировать, по умолчанию **KOI8-R** Кроме того, можно использовать готовую утилиту "convmv" из репозитория "extra". Умеет она намного больше, чем вышеописанный скрипт, но требует установленный perl в системе. Midnight Commander ------------------- Есть два вариант, mc-utf8 из репозитария **community** либо вот этот образец: [http://pupykins.googlepages.com/mc.html](http://pupykins.googlepages.com/mc.html) Автор mc-cru и автор порта в community - суть один человек, имя ему Сергей Пупыкин (надеюсь правильно написал фамилию) в том виде в котором идет mc-cru очень нелицеприятный. Что бы привести его в чувство, смержил utf8 патч с той версии что в репозитарии, плюс сделал пееркодировку в редакторе (но тут кроется бага... страшная, которую пока лень решать, при перекодировке в редакторе не работает поиск и замена).