4.6 KiB
title | tags |
---|---|
UTF8 локаль в ArchLinux | archlinux, unicode |
Дизель выложил в свое время замечательную ссылочку на форуме по поднятию 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
Автор mc-cru и автор порта в community - суть один человек, имя ему Сергей Пупыкин (надеюсь правильно написал фамилию) в том виде в котором идет mc-cru очень нелицеприятный. Что бы привести его в чувство, смержил utf8 патч с той версии что в репозитарии, плюс сделал пееркодировку в редакторе (но тут кроется бага... страшная, которую пока лень решать, при перекодировке в редакторе не работает поиск и замена).