переброс с koi8 в utf-8 (koi8 в utf-8)

openSUSE, SUSE Linux Enterprise

Модератор: Модераторы разделов

Ответить
tjoma
Сообщения: 108

переброс с koi8 в utf-8

Сообщение tjoma »

доброго время суток !
Прошу Вашей помощи.

Уважаемые господа дело в следующем есть 2 машины на 1 red hat 7.3 в кодировке koi8-r и sles11 sp3 в utf-8 , надо перебросить документацию Openoffice (*.odt) с одной на другую с сохранением прав доступа . пробовал архивировать (tar,bzip2) и на другой разархивировать, так кодировка в именах документов крякобразна . Подскажите как правильно надо перенести
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: переброс с koi8 в utf-8

Сообщение Bizdelnick »

Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

Re: переброс с koi8 в utf-8

Сообщение yars »

convmv - это оптимальный вариант. Но можно и накостылить костыль, что-то вроде этого:

Код: Выделить всё

#!/bin/bash
movefile() {
newname=$(echo "$1" | iconv -fkoi8r -tutf8)
mv "$1" "$newname")
}
for f in $(find "$1" -print); do
    movefile "$f"
done
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: переброс с koi8 в utf-8

Сообщение eddy »

Между прочим, 7z вызывает enconv для преобразования неверных имен файлов.

А вообще, бить по рукам тех, кто файлы именует запрещенными символами! Они бы еще пробелов в имя файла насовали...
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
tjoma
Сообщения: 108

Re: переброс с koi8 в utf-8

Сообщение tjoma »

вопрос решон, всем большая благодарность за помощь.
_________________________________________________________

Пользоваться утилитой легко и для начала нужно выбрать исходную кодировку и необходимую. Далее посмотрим в тестовом режиме как будет выглядеть перекодирование и если все в порядке то приступим к конвертированию.
Я знал, что все файлы в кодировкe koi8-r то я и выбрал в качестве исходной и мне было нужно всего навсего выставил нужную кодировку utf-8. Вы можете пробовать любые варианты кодировок. Приступим к проверке.

convmv -r -f koi8-r -t utf-8 doc/

mv "doc/Arcade/бЕЯЕКЮЪ ТЕПЛЮ II.rar" "doc/Arcade/веелая ферма II.rar"
mv "doc/Arcade/ЯСОЕП ЙНПНБЮ.rar" "doc/Arcade/супер корова.rar"
...............................................
No changes to your files done. Use --notest to finally rename the files.

Как видим все в порядке файлы стали читабельны и теперь нам необходимо запустить с параметром --notest для выполнения конвертирования.

convmv -r -f koi8-r -t utf-8r --notest doc/
~~
Ready!


Вот и все спустя некоторое время все файлы у меня были конвертированы в нужный формат.
Для дополнительных изменений во время конвертирования почитал man.


convmv --list

Изменение кодировки

# convmv -r --notest -f ENC_FROM -t ENC_TO DIR

где:

ENC_FROM - исходная кодировка ( koi8-r,utf-8)
ENC_TO - новая кодировка (utf8)
DIR - рабочий каталог
-r - работать рекурсивно
--notest - начать перекодировку имен файлов без запроса подтверждения
Спасибо сказали:
tjoma
Сообщения: 108

Re: переброс с koi8 в utf-8

Сообщение tjoma »

а если размер файла более 255 bytes ,что делать?
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: переброс с koi8 в utf-8

Сообщение Hephaestus »

tjoma писал(а):
24.02.2015 11:29
а если размер файла более 255 bytes ,что делать?
А в чём проблема?
Вроде convmv пофиг на размер файла - она с именами работает.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: переброс с koi8 в utf-8

Сообщение Bizdelnick »

tjoma писал(а):
24.02.2015 11:29
а если размер файла более 255 bytes ,что делать?

Эээ... Вы хотели сказать - имя файла после перекодирования в UTF-8 становится больше 255 байт? Ну извиняйте, только укорачивать.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
tjoma
Сообщения: 108

Re: переброс с koi8 в utf-8

Сообщение tjoma »

Bizdelnick писал(а):
24.02.2015 12:46
tjoma писал(а):
24.02.2015 11:29
а если размер файла более 255 bytes ,что делать?

Эээ... Вы хотели сказать - имя файла после перекодирования в UTF-8 становится больше 255 байт? Ну извиняйте, только укорачивать.



ну а если файлов несколька сотен?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: переброс с koi8 в utf-8

Сообщение Bizdelnick »

А какая разница, сколько их?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: переброс с koi8 в utf-8

Сообщение Hephaestus »

tjoma писал(а):
24.02.2015 14:31
ну а если файлов несколька сотен?
И что все с такими длинными именами?
Вообще это очень плохая привычка - давать файлам длинные имена, со всякими пробелами, да ещё не латинницей.
И эта тема - прекрасная тому иллюстрация.

Вам остаётся только взять на вооружение инструменты массового переименования файлов вроде rename или thunar -B, первый умеет регулярки в стиле sed, второй - всего лишь файловый менеджер, запущенный в определенном режиме, а значит имеет граф. морду.

Ну или конкретно в Вашей ситуации я бы, возможно, набросал скрипт, который переименовывал бы файлы транслитом, убирая пробелы и прочие знаки либо заменяя их на подчеркивания и т.п. В этом случае хватило бы простой mv.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: переброс с koi8 в utf-8

Сообщение Bizdelnick »

Hephaestus писал(а):
24.02.2015 15:03
первый умеет регулярки в стиле sed

Не умеет. :-)
Есть две программы под названием rename. Та, которая умеет регулярки, написана на Perl (и в Debian называется prename), и синтаксис там, соответственно, как в perl, а не как в sed. Вторая (в Debian она называется rename.ul, потому что входит в пакет util-linux) и вовсе регуляркам не обучена.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: переброс с koi8 в utf-8

Сообщение Hephaestus »

Bizdelnick писал(а):
24.02.2015 15:10
Не умеет. :-)
Да?
Первая попавшаяся ссылка из гугла
http://www.linuxandlife.com/2013/02/how-to...ith-rename.html

Цитирую
The syntax of "rename" is quite complicated though, its general form is:

Код: Выделить всё

rename 's/old-name/new-name/' filespec


Кто скажет, что 's/old-name/new-name/' - это не в стиле sed, пусть первый бросит в меня камень.

Bizdelnick писал(а):
24.02.2015 15:10
Есть две программы под названием rename.
Это мне известно. Разные названия у программ - это только в Debian, если не ошибаюсь.
Я не стал упоминать об этом, может быть и зря.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: переброс с koi8 в utf-8

Сообщение Bizdelnick »

Камнями кидаться не буду, могу только повторить то, что писал выше: там синтаксис регулярных выражений perl, от sed он отличается довольно сильно. Что касается самой команды s/regex/replacement/, то да, можно сказать, что она в стиле sed, можно - что в стиле perl, хотя изначально она появилась, если не ошибаюсь, в ed. Но интерпретируется она в данном случае непосредственно perl.

Hephaestus писал(а):
24.02.2015 15:36
Разные названия у программ - это только в Debian, если не ошибаюсь.

В большинстве других дистрибутивов вроде бы как раз rename из util-linux под именем rename. В Debian по умолчанию - prename. Поскольку у ТС SLES, я посчитал нужным это уточнить.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: переброс с koi8 в utf-8

Сообщение Hephaestus »

Bizdelnick писал(а):
24.02.2015 15:10
Есть две программы под названием rename.
Справедливости ради надо сказать, что есть, как минимум, ещё одна программа с таким именем.
Только уже на python.
https://pypi.python.org/pypi/rename

Bizdelnick писал(а):
24.02.2015 16:07
В большинстве других дистрибутивов вроде бы как раз rename из util-linux под именем rename. В Debian по умолчанию - prename. Поскольку у ТС SLES, я посчитал нужным это уточнить.
Мда... А она, похоже, только в Debian и есть. Она там включена в состав perl, а в слаке, к примеру, её в составе perl нету. Там, кажись, если её при сборке специально не заказать, то и будет perl без неё.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
alv
Бывший модератор
Сообщения: 7274
Статус: Пенсионер в законе
ОС: Cintu
Контактная информация:

Re: переброс с koi8 в utf-8

Сообщение alv »

Hephaestus писал(а):
24.02.2015 15:03
инструменты массового переименования файлов вроде rename или thunar -B, первый умеет регулярки в стиле sed, второй - всего лишь файловый менеджер, запущенный в определенном режиме, а значит имеет граф. морду.

Переименователей с графическими мордами много: gprename, pyrenamer, krename, autorenamer, в Xfce ещё какой-то свой был, забыл, как называется
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: переброс с koi8 в utf-8

Сообщение Hephaestus »

alv писал(а):
24.02.2015 19:11
в Xfce ещё какой-то свой был, забыл, как называется
Да вроде Thunar и был. Он же там оболочкой по умолчанию. Если не путаю.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

Re: переброс с koi8 в utf-8

Сообщение yars »

Hephaestus писал(а):
24.02.2015 20:00
Да вроде Thunar и был

Почти. Это Thunar-bulk-rename.
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: переброс с koi8 в utf-8

Сообщение eddy »

Код: Выделить всё

echo очень_длинное_и_совершенно_идиотское_имя_файла,_содержащее_практически_одни_лишь_запрещенные_символы._Нужно_быть_очень_ненормальным,_чтобы_называть_так_файлы._Ну_зачем,_скажите_мне,_зачем_таким_извращением_страдать?_Ох_уж_эти_вантузятнички...............|wc -c
255

touch очень_длинное_и_совершенно_идиотское_имя_файла,_содержащее_практически_одни_лишь_запрещенные_символы._Нужно_быть_очень_ненормальным,_чтобы_называть_так_файлы._Ну_зачем,_скажите_мне,_зачем_таким_извращением_страдать?_Ох_уж_эти_вантузятнички...............

ls
.
..
очень_длинное_и_совершенно_идиотское_имя_файла,_содержащее_практически_одни_лишь_запрещенные_символы._Нужно_быть_очень_ненормальным,_чтобы_называть_так_файлы._Ну_зачем,_скажите_мне,_зачем_таким_извращением_страдать?_Ох_уж_эти_вантузятнички...............
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
alv
Бывший модератор
Сообщения: 7274
Статус: Пенсионер в законе
ОС: Cintu
Контактная информация:

Re: переброс с koi8 в utf-8

Сообщение alv »

yars писал(а):
24.02.2015 20:09
Почти. Это Thunar-bulk-rename.

Точно. Раньше это был плагин к Thunar'у, его отдельно ставить надо было
Спасибо сказали:
tjoma
Сообщения: 108

Re: переброс с koi8 в utf-8

Сообщение tjoma »

Уважаемые господа !
Так дело в том что в sles11sp3 ни какой выше описанной утилиты нет
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

Re: переброс с koi8 в utf-8

Сообщение yars »

tjoma писал(а):
25.02.2015 11:24
Так дело в том что в sles11sp3 ни какой выше описанной утилиты нет

Что, даже iconv нет? Скриптик вам дали, если что, доработаете. Он, вообще-то, и так работать должен, но я его не проверял. Да и в конце концов, что мешает тот же convmv поставить?
Хотя, тут и скрипта много, достаточно возможностей find и xargs.
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:
tjoma
Сообщения: 108

Re: переброс с koi8 в utf-8

Сообщение tjoma »

yars писал(а):
25.02.2015 11:44
tjoma писал(а):
25.02.2015 11:24
Так дело в том что в sles11sp3 ни какой выше описанной утилиты нет

Что, даже iconv нет? Скриптик вам дали, если что, доработаете. Он, вообще-то, и так работать должен, но я его не проверял. Да и в конце концов, что мешает тот же convmv поставить?
Хотя, тут и скрипта много, достаточно возможностей find и xargs.


Вы внимательно читали всю тему ? проблема стоит в том, что некоторые имя файла после перекодирования в UTF-8 становится больше 255 байт? convmv допускает до 255. А файлов очень много, так что ручками длину не поправишь, а утилит типа gprename, pyrenamer, krename, autorenamer в sles11sp3 нет
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: переброс с koi8 в utf-8

Сообщение Bizdelnick »

Ну допилите предложенный скрипт, чтобы он проверял длину имени и сокращал его при необходимости, или транслитерировал в ASCII вместо перекодирования. Не забудьте, главное, добавить проверку существования файла с таким же именем.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: переброс с koi8 в utf-8

Сообщение eddy »

Если надумаете в транслит, то у меня готовый скриптик есть:

Код: Выделить всё

cat ~/bin/rename_translit
#!/bin/sh
# this script has been written by Eddy
#
#        rename_translit --- переводит русские имена файлов в транслит
#
# Создан 22-го Май 2006 года в  9:24
#
rmspaces
for Name in `ls -1`
do
    Newname=`echo "$Name"|enconv|sed -e \
    "y/йукенгзхъфывапролдэсмитьбЙУКЕНГЗХЪФЫВАПРОЛДЭСМИТЬБ/jukengzh'fyvaproldesmit'bJUKENGZH'FYVAPROLDESMIT'B/"\
    -e "s/ц/tz/g"    \
    -e "s/ш/sh/g"    \
    -e "s/щ/sch/g"    \
    -e "s/ж/zh/g"    \
    -e "s/ч/ch/g"    \
    -e "s/ю/yu/g"    \
    -e "s/я/ya/g"    \
    -e "s/ё/yo/g"    \
    -e "s/Ё/YO/g"    \
    -e "s/Ц/TZ/g"    \
    -e "s/Ш/SH/g"    \
    -e "s/Щ/SCH/g"    \
    -e "s/Ж/ZH/g"    \
    -e "s/Ч/CH/g"    \
    -e "s/Ю/YU/g"    \
    -e "s/?/_/g"    \
    -e "s/Я/YA/g"`
    if [ "$Name" != "$Newname" ]; then
        mv "$Name" "$Newname"
    echo -e "$Name   ->    $Newname                             \r\c"
    fi
    if [ -d "$Newname" ]; then
    cd "$Newname" 2>/dev/null
    if [ $? == 0 ]; then
        echo -e "\n\nDiving into $Newname"
        rename_translit
        cd ../
    fi
    fi
done


Он использует вот это:

Код: Выделить всё

cat ~/bin/rmspaces
#!/bin/sh
# this script has been written by Eddy
#
#        rmspaces -- убирает пробелы в именах файлов
#
# Создан 20-го Сентябрь 2004 года в 20:57
#
list=/tmp/rmspaces.$$
ls -1 > $list

while read file
do
    new=`echo "$file" | sed "s/\ /_/g"`
    if [ "$new" != "$file" ]; then
    mv "$file" "$new"
    echo "$file  RENAMED INTO   $new"
    fi
    if [ "$1" = "-r" -a -d "$new" ]; then
        cd "$new"
    echo -e "\t\tDiving into $PWD"
        rmspaces -r
        cd ../
    fi
done < $list
rm $list

для корректирования неверных имен файлов (заменяет пробелы на символы подчеркивания).
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
alv
Бывший модератор
Сообщения: 7274
Статус: Пенсионер в законе
ОС: Cintu
Контактная информация:

Re: переброс с koi8 в utf-8

Сообщение alv »

tjoma писал(а):
25.02.2015 12:46
утилит типа gprename, pyrenamer, krename, autorenamer в sles11sp3 нет

а вы по репозиториям искали?
если нет в официальном, посмотрите в OBS-репозитории
Спасибо сказали:
Ответить