переброс с koi8 в utf-8 (koi8 в utf-8)
Модератор: Модераторы разделов
переброс с koi8 в utf-8
доброго время суток !
Прошу Вашей помощи.
Уважаемые господа дело в следующем есть 2 машины на 1 red hat 7.3 в кодировке koi8-r и sles11 sp3 в utf-8 , надо перебросить документацию Openoffice (*.odt) с одной на другую с сохранением прав доступа . пробовал архивировать (tar,bzip2) и на другой разархивировать, так кодировка в именах документов крякобразна . Подскажите как правильно надо перенести
Прошу Вашей помощи.
Уважаемые господа дело в следующем есть 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
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: переброс с koi8 в utf-8
convmv - это оптимальный вариант. Но можно и накостылить костыль, что-то вроде этого:
Код: Выделить всё
#!/bin/bash
movefile() {
newname=$(echo "$1" | iconv -fkoi8r -tutf8)
mv "$1" "$newname")
}
for f in $(find "$1" -print); do
movefile "$f"
done
Re: переброс с koi8 в utf-8
Между прочим, 7z вызывает enconv для преобразования неверных имен файлов.
А вообще, бить по рукам тех, кто файлы именует запрещенными символами! Они бы еще пробелов в имя файла насовали...
А вообще, бить по рукам тех, кто файлы именует запрещенными символами! Они бы еще пробелов в имя файла насовали...
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
Re: переброс с koi8 в utf-8
вопрос решон, всем большая благодарность за помощь.
_________________________________________________________
Пользоваться утилитой легко и для начала нужно выбрать исходную кодировку и необходимую. Далее посмотрим в тестовом режиме как будет выглядеть перекодирование и если все в порядке то приступим к конвертированию.
Я знал, что все файлы в кодировк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 - начать перекодировку имен файлов без запроса подтверждения
_________________________________________________________
Пользоваться утилитой легко и для начала нужно выбрать исходную кодировку и необходимую. Далее посмотрим в тестовом режиме как будет выглядеть перекодирование и если все в порядке то приступим к конвертированию.
Я знал, что все файлы в кодировк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 - начать перекодировку имен файлов без запроса подтверждения
Re: переброс с koi8 в utf-8
а если размер файла более 255 bytes ,что делать?
- Hephaestus
- Сообщения: 3729
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
- Контактная информация:
Re: переброс с koi8 в utf-8
А в чём проблема?
Вроде convmv пофиг на размер файла - она с именами работает.
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: переброс с koi8 в utf-8
Эээ... Вы хотели сказать - имя файла после перекодирования в UTF-8 становится больше 255 байт? Ну извиняйте, только укорачивать.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: переброс с koi8 в utf-8
Bizdelnick писал(а): ↑24.02.2015 12:46
Эээ... Вы хотели сказать - имя файла после перекодирования в UTF-8 становится больше 255 байт? Ну извиняйте, только укорачивать.
ну а если файлов несколька сотен?
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: переброс с koi8 в utf-8
А какая разница, сколько их?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Hephaestus
- Сообщения: 3729
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
- Контактная информация:
Re: переброс с koi8 в utf-8
И что все с такими длинными именами?
Вообще это очень плохая привычка - давать файлам длинные имена, со всякими пробелами, да ещё не латинницей.
И эта тема - прекрасная тому иллюстрация.
Вам остаётся только взять на вооружение инструменты массового переименования файлов вроде rename или thunar -B, первый умеет регулярки в стиле sed, второй - всего лишь файловый менеджер, запущенный в определенном режиме, а значит имеет граф. морду.
Ну или конкретно в Вашей ситуации я бы, возможно, набросал скрипт, который переименовывал бы файлы транслитом, убирая пробелы и прочие знаки либо заменяя их на подчеркивания и т.п. В этом случае хватило бы простой mv.
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: переброс с koi8 в utf-8
Не умеет. :-)
Есть две программы под названием rename. Та, которая умеет регулярки, написана на Perl (и в Debian называется prename), и синтаксис там, соответственно, как в perl, а не как в sed. Вторая (в Debian она называется rename.ul, потому что входит в пакет util-linux) и вовсе регуляркам не обучена.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Hephaestus
- Сообщения: 3729
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
- Контактная информация:
Re: переброс с koi8 в utf-8
Да?
Первая попавшаяся ссылка из гугла
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, пусть первый бросит в меня камень.
Это мне известно. Разные названия у программ - это только в Debian, если не ошибаюсь.
Я не стал упоминать об этом, может быть и зря.
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: переброс с koi8 в utf-8
Камнями кидаться не буду, могу только повторить то, что писал выше: там синтаксис регулярных выражений perl, от sed он отличается довольно сильно. Что касается самой команды s/regex/replacement/, то да, можно сказать, что она в стиле sed, можно - что в стиле perl, хотя изначально она появилась, если не ошибаюсь, в ed. Но интерпретируется она в данном случае непосредственно perl.
В большинстве других дистрибутивов вроде бы как раз rename из util-linux под именем rename. В Debian по умолчанию - prename. Поскольку у ТС SLES, я посчитал нужным это уточнить.
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
Справедливости ради надо сказать, что есть, как минимум, ещё одна программа с таким именем.
Только уже на python.
https://pypi.python.org/pypi/rename
Мда... А она, похоже, только в Debian и есть. Она там включена в состав perl, а в слаке, к примеру, её в составе perl нету. Там, кажись, если её при сборке специально не заказать, то и будет perl без неё.Bizdelnick писал(а): ↑24.02.2015 16:07В большинстве других дистрибутивов вроде бы как раз rename из util-linux под именем rename. В Debian по умолчанию - prename. Поскольку у ТС SLES, я посчитал нужным это уточнить.
Re: переброс с koi8 в utf-8
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
Да вроде Thunar и был. Он же там оболочкой по умолчанию. Если не путаю.
Re: переброс с koi8 в utf-8
Почти. Это Thunar-bulk-rename.
Re: переброс с koi8 в utf-8
Код: Выделить всё
echo очень_длинное_и_совершенно_идиотское_имя_файла,_содержащее_практически_одни_лишь_запрещенные_символы._Нужно_быть_очень_ненормальным,_чтобы_называть_так_файлы._Ну_зачем,_скажите_мне,_зачем_таким_извращением_страдать?_Ох_уж_эти_вантузятнички...............|wc -c
255
touch очень_длинное_и_совершенно_идиотское_имя_файла,_содержащее_практически_одни_лишь_запрещенные_символы._Нужно_быть_очень_ненормальным,_чтобы_называть_так_файлы._Ну_зачем,_скажите_мне,_зачем_таким_извращением_страдать?_Ох_уж_эти_вантузятнички...............
ls
.
..
очень_длинное_и_совершенно_идиотское_имя_файла,_содержащее_практически_одни_лишь_запрещенные_символы._Нужно_быть_очень_ненормальным,_чтобы_называть_так_файлы._Ну_зачем,_скажите_мне,_зачем_таким_извращением_страдать?_Ох_уж_эти_вантузятнички...............
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
Re: переброс с koi8 в utf-8
Точно. Раньше это был плагин к Thunar'у, его отдельно ставить надо было
Re: переброс с koi8 в utf-8
Уважаемые господа !
Так дело в том что в sles11sp3 ни какой выше описанной утилиты нет
Так дело в том что в sles11sp3 ни какой выше описанной утилиты нет
Re: переброс с koi8 в utf-8
Что, даже iconv нет? Скриптик вам дали, если что, доработаете. Он, вообще-то, и так работать должен, но я его не проверял. Да и в конце концов, что мешает тот же convmv поставить?
Хотя, тут и скрипта много, достаточно возможностей find и xargs.
Re: переброс с koi8 в utf-8
Вы внимательно читали всю тему ? проблема стоит в том, что некоторые имя файла после перекодирования в UTF-8 становится больше 255 байт? convmv допускает до 255. А файлов очень много, так что ручками длину не поправишь, а утилит типа gprename, pyrenamer, krename, autorenamer в sles11sp3 нет
- Bizdelnick
- Модератор
- Сообщения: 20752
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: переброс с koi8 в utf-8
Ну допилите предложенный скрипт, чтобы он проверял длину имени и сокращал его при необходимости, или транслитерировал в ASCII вместо перекодирования. Не забудьте, главное, добавить проверку существования файла с таким же именем.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: переброс с koi8 в utf-8
Если надумаете в транслит, то у меня готовый скриптик есть:
Он использует вот это:
для корректирования неверных имен файлов (заменяет пробелы на символы подчеркивания).
Код: Выделить всё
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 - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
Re: переброс с koi8 в utf-8
а вы по репозиториям искали?
если нет в официальном, посмотрите в OBS-репозитории