nixp.ru v3.0

17 января 2017,
вторник,
07:47:06 MSK

Аутсорсинг Linux с компанией «Флант»
anonymous написал 28 сентября 2005 года в 09:34 (368 просмотров) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Стоял у меня сначала Mandrake 10.1 и был у меня отдельный ext3 раздел для /home Насколько я понял все имена файлов хранились в koi8-r

Теперь я поставил FedoraCore4 и хочу также использовать этот раздел для /home. Но оказалось, что русские имена файлов он отображать не хочет(что-то вроде encoding error), потому что ему в utf8 подавай. Так вот, вопрос такой: как сделать, чтобы этот имена в этом разделе воспринимались в кодировке koi8-r? Или как сконвертировать все файлы из /home в правильную кодировку?

anonymous

Забыл еще добавить, что параметры монтирования типа codepage и iocharset применяются для монтировании только fat, и вроде для ext3 неприменимы. Читал man mount и ничего по заданию кодировки в ext3 (он же ext2) не нашел

8084

Такая же трабла и рейзером 3.6

т.е. с мандривой(koi8-r) и с live-cd ubuntu(utf8)

rgo

у меня где-то скрипт перекодировки валялся…

ага, точно:

#!/bin/bash
function recode_recursive () {
    if [ -d "$1" ]; then
      echo "entering $1"
      cd "$1"
      for i in *; do
          recode_recursive "$i"
      done
      echo "exiting $1"
      cd ..
    fi
    decoded=`echo $1 | iconv -f koi8-r -t utf-8`;
    if [ $? == 0 ]; then
        if [[ "$decoded" != "$1" ]]; then
          echo "$1" '==>' "$decoded"
          mv "$1" "$decoded"
        else
            echo 'Skipping' "$1"
        fi
    else
        echo "ERROR!!!: $1"
    fi;
}
recode_recursive .

вроде работал. Но вы проверьте на всякий случай, закомментируйте mv и проверьте ;). А то если половина файлов перекодируется, а другая — нет (или ещё лучше не в ту, или не из той кодовой таблицы кодируется), тогда точно ручками придётся всё это делать.

А с другой стороны… для gtk можно переменную окружения объявить, как биш её… что то вроде G_FILENAME_ENCODING. консоль тоже можно в koi8-r рисовать. в общем либо мой скрипт (который так до конца и не был проверен, все баги какие вылезли я пофиксил, но в конце концов всё было перекодировано, а уверенности что он работает всегда не появилось) — либо настройка локали :).

anonymous

Сработало. Вот только я бы еще сделал защиту от повторного переименования, когда имя уже в кодировке utf-8. Для этого нужно проверять, сконвертированная строка имеет ту же длину что и оригинал. Что-то вроде:

if [[ "$decoded" != "$1" ]] && (strlen($decoded) == strlen($1))…

Правда я не знаю, как это в bash правильно написать.

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.