Перевод серверов с KOI8-R на UTF-8

Автор: | 18.06.2009

Лучше поздно чем никогда, решил перевести пару серверов на UTF-8, в связи с чем возникла проблема перекодировки русских имён файлов и текстовых файлов. Решил поделиться скриптами. Итак, для перекодировки имён файлов с KOI8-R в UTF-8, вот такой скрипт, который перекодирует файлы в текущем каталоге.

convert_filenames_from_koi8-r_to_utf-8.sh:

#!/bin/bash

ls -1 | while read name ; do
newname=`echo $name | iconv -f KOI8-R -t UTF-8`
if [ "$name" != "$newname" ] ; then
  echo "$name => $newname"
  mv -f "$name" "$newname"
fi
done

Для перекодировки файлов решено было расширить меню Midnight Commander-а (mc) соответствующим пунктом. Т. е. выбираются файлы, которые нужно перекодировать, нажимается кнопка F2, выбирается последний пункт. Для внесения изменений в меню Midnight Commander-а, необходимо добавить в конец файла /etc/mc/mc.menu следующие строки:

= t r
+ ! t t
i       Convert from KOI8-R to UTF-8 current file
        cp %f %f.KOI8-R
        iconv -f KOI8-R -t UTF-8 < %f.KOI8-R > %f
        rm -f %f.KOI8-R

+ t t
I       Convert from KOI8-R to UTF-8 tagged files
        for i in %t
        do
          cp $i $i.KOI8-R
          iconv -f KOI8-R -t UTF-8 < $i.KOI8-R > $i
          rm -f $i.KOI8-R
        done
Facebooktwittergoogle_plusredditpinterestlinkedintumblr

Comments

comments

Перевод серверов с KOI8-R на UTF-8: 8 комментариев

  1. bosha

    Сервера на FreeBSD наверное были? 🙂 Только они сейчас вроде на KOI8-R остались. К слову сказать, это самый что не на есть костыль на мой взгляд (Я про KOI8-R). Я вот уже мечтаю когда во freebsd (обещают вроде в 8.10 уже) сделают нормальную поддержку UTF-8 вместо устаревшего кои…

  2. ras Автор записи

    > Сервера на FreeBSD наверное были?

    Нет, CentOS, но как-то ещё с 8-ой Красной Шапки повелось, все были в KOI8-R, потом таки решились 🙂

    Во FreeBSD тоже жду не дождусь UTF-8, т. к. абсолютно согласен с костыльностью KOI8-R, о чём говорит история появления данной кодировки 🙂

  3. bosha

    >Во FreeBSD тоже жду не дождусь UTF-8, т. к. абсолютно согласен с костыльностью KOI8-R, о чём говорит история появления данной кодировки 🙂

    Кстати, не знал что в CentOS когда-то тоже был koi8-r 🙂

    Я не так давно в компьютерной сфере, и такие исторические моменты не знаю. Какова история появления koi8-r? ☺

  4. ras Автор записи

    > Кстати, не знал что в CentOS когда-то тоже был koi8-r 🙂

    Дело в том, что изначально там UTF-8, но локаль можно поставить любую, а так как все остальные были в KOI8-R, то естественно переводили, дабы не разводить зоопарк, да и все наработки в KOI8-R были.

  5. SteelRat

    А так можно «окучить» всю папку /home 🙂

    find /home -name "*" | while read name ; do
    newname=`echo $name | iconv -f KOI8-R -t UTF-8`
    if [ "$name" != "$newname" ] ; then
      echo "$name => $newname"
      mv -f "$name" "$newname"
    fi
  6. VladVons

    Предлагаю свое решение перекодировки файлов transmission UTF8 для тех у кого консоль KOI8.

    Суть такова:
    Перекодируем папку с файлами transmission кодировки UTF8 в «нормальную (KOI8)» папку утилитой iconv.
    Файлы не копируются, а только создаются KOI8 symlink на файлы transmission с кодировкой UTF8
    После этого можно по SAMBA или FTP забирать как обычно.

    У меня торрент файлы закачиваются в папку /mnt/data1/share/Public/Torrent/Download.
    В папке /mnt/data1/share/Public/Torrent/Convert будут уже переконвертированные в KOI8 ссылки на UTF8 источник

    FileToSymLinkConvert.sh

        #!/bin/sh
        #
        # VladVons@mail.ru
        #-----------------
    
        DirRoot="/mnt/data1/share/Public/Torrent"
        DirDownload="$DirRoot/Download"
        DirConvert="$DirRoot/Convert"
    
    
        Convert()
        # ------------------------
        {
        aCharSetSrc=$1; aCharSetDst=$2;
    
        rm -R ${DirConvert}/*
    
        Cnt=1
        find $DirDownload | grep -v ".part" | while read Name ; do
            NewName=$(echo $Name | iconv -f $aCharSetSrc -t $aCharSetDst)
            NewNameSub=`echo "$NewName" | awk -v aPath=$DirDownload '{ print substr($0,length(aPath)+1); }'`
    
            if [ -d "$Name" ]; then
                mkdir -p "${DirConvert}${NewNameSub}"
            else
                Cnt=$(($Cnt + 1))
    
                LinkName="${DirConvert}${NewNameSub}"
                echo "$Cnt $LinkName"
                ln -s "${Name}" "$LinkName"
            fi
        done
        }
    
        # ------------------------
        clear
        Convert UTF-8 KOI8-U
        sleep 1
    
  7. ras Автор записи

    Вариант конечно, но я бы не называл «кормальной» кодировку KOI8-R, она родилась как костыль, и уже сколько лет можно нормально использовать UTF-8, без занятия перекодировками и прочим костылестроением. Нужно лишь однажды решиться и отказаться от KOI8-R :).

  8. dens

    convmv -r -f koi8-r -t utf-8 —notest

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

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