nixp.ru v3.0

20 октября 2017,
пятница,
00:59:12 MSK

DevOps с компанией «Флант»
Аватар пользователя DimkaS
DimkaS написал 15 августа 2006 года в 12:47 (834 просмотра) Ведет себя как мужчина; открыл 84 темы в форуме, оставил 922 комментария на сайте.

Такая проблема: копировал файлы с фата на ext3 под Убунту с локалью utf8. Потом подключил винт с файлами к машине с Дебианом (koi8-r). Все русские имена стали нечитаемы (видно, что 2-х байтовые). Можно ли это исправить и как поступать в случае, когда локали систем отличаются?

Feuerbach

Эт смотря что ты хочешь. Можно или подстроить файлы под систему — программа convmv конвертирует имена файлов;

или подстроить систему для работы с файлами — конкретному процессу дать LC_ALL=ru_RU.UTF-8.

«Локаль системы» — это миф :-)

DimkaS
Feuerbach
«Локаль системы» — это миф :-)

Ну, я имел в виду дефолтную.

Т.о. имена скопированных файлов можно исправить с помощью convmv, а в будущем, перед cp делать export LC_ALL=ru_RU.UTF8. Всё правильно понял?

Feuerbach
Т.о. имена скопированных файлов можно исправить с помощью convmv

Угу.

в будущем, перед cp делать export LC_ALL=ru_RU.UTF8

Нет, это тебе вряд ли что-то даст. cp все равно будет в точности копировать имена файлов, хоть оно их будет читаь в UTF-8 или KOI8-R. В будущем тоже convmv :)

DimkaS
Feuerbach
Нет, это тебе вряд ли что-то даст. cp все равно будет в точности копировать имена файлов, хоть оно их будет читаь в UTF-8 или KOI8-R. В будущем тоже convmv :)

Мдя… Ну, или дефолтную локаль сменить перед копированием.

Спасибо!

DimkaS


koi8-r doesn't cover all needed characters for: "./music/Music/Stratovarius/[2005] - Stratovarius/06 - Gц╤tterdц╓mmerung (Zenith Of Pow).mp3"
To prevent damage to your files, we won't continue.
First fix this or correct options!

В именах этих файлов есть немецкие буквы с точечками, которые в винде отображаются вполне корректно. С чего бы?

Мож, надо было фат оставить — всё равно доступ через самбу… ??

И еще вопрос: на файлах остался атрибут исполняемости. Если делать chmod рекурсивно, то атрибут снимается и с директорий и их содержимое перестаёт отображаться. Как бы это исправить?

rgo
DimkaS
И еще вопрос: на файлах остался атрибут исполняемости. Если делать chmod рекурсивно, то атрибут снимается и с директорий и их содержимое перестаёт отображаться. Как бы это исправить?



find /where/to/unexec -type f | xargs chmod -x
rgo
DimkaS
Мдя… Ну, или дефолтную локаль сменить перед копированием.

локаль тут не причём. `cp' копирует файлы как есть, не внося никаких изменений в имена. Драйвер ext3, тоже выдаёт имена файлов в том виде, в котором они на диске записаны, нисколько не задумываясь о существовании каких-то там кодировок. А вот драйвер fat умеет перекодировать имена файлов, хотя по дефолту поступает с именами, точно также как и ext3. Надо было просто смонтировать fat с нужными опциями codepage и iocharset, чтобы объяснить драйверу, соответственно, откуда и куда перекодировать.

DimkaS
rgo
Надо было просто смонтировать fat с нужными опциями codepage и iocharset, чтобы объяснить драйверу, соответственно, откуда и куда перекодировать.

Т.е. надо было смонтировать фат с iocharset=koi8-r?

Ясно.

По предыдущему: не прокатывает, если в имени файла есть пробел. Надо что-то взять в кавычки. Но что?

Feuerbach
DimkaS
По предыдущему: не прокатывает, если в имени файла есть пробел. Надо что-то взять в кавычки. Но что?



find dir -type f -exec chmod -x {} +

Или если хочется с xargs, см. пример в man find.

Sasha2

Ну а я может быть чего то не сращиваю, но вот вот раньше я тоже использовал опцию iochaset=koi8-r при монтировании CD-ROM, тогда все становилось читабельным.

Но вот сейчас после установки Ubuntu 6.06 система автоматически прописала такую строчку для монтирования CD-ROM:

/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0

При этом все диски с русскими именами (неважно где записанные в Windows или в Линукс и неважно с какой локалью) читаются как положено.

Feuerbach

Хм. А что у тебя за локаль? Юникодная?

Sasha2

Нет, всегда пользусь koi8-r и меняю ее на таковую, если встречаю дистрибутив, в котором используется юникодная локаль.

Sasha2

Да правда, хочу заметить, что настроить корректно локаль в Ubuntu, не сказать, что трудно, но достаточно гимморно. Надо ознакомиться с использованием файлов в каталоге /var/lib/locales/supported.d, а также с массой dpkg команд по настройке локали, ну и конечно правильно прописать значения в файл /etc/environment (Многие, почему то считают, что этого достаточно, хотя на самом деле это последний шаг по настроке локали в Ubunty, ну может сейчас уже и в Debian точно также).

rgo
Sasha2
Но вот сейчас после установки Ubuntu 6.06 система автоматически прописала такую строчку для монтирования CD-ROM:

/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0

При этом все диски с русскими именами (неважно где записанные в Windows или в Линукс и неважно с какой локалью) читаются как положено.

странно. драйвер iso9660, ведь не знает ничего про локаль…

А, кстати, где читается? Если в гуе, то, скажем glib, тоже перекодирует имена. По дефолту предполагая, что имена файлов в utf8. Ну а в iso9660, насколько я знаю, именно utf8 и используется.

Feuerbach
rgo
Ну а в iso9660,  насколько я знаю, именно utf8 и используется.

В mount(8) пишут, что там какой-то 16-битный юникод. Для перекодировки в UTF-8 используется опция utf8.

Sasha2
rgo
странно. драйвер iso9660, ведь не знает ничего про локаль…

А, кстати, где читается? Если в гуе, то, скажем glib, тоже перекодирует имена. По дефолту предполагая, что имена файлов в utf8. Ну а в iso9660, насколько я знаю, именно utf8 и используется.

Везде читается и в консоле в том числе. Ну разумеется я не тестировал со всеми программами. Меня вполне удовлетворяет обычный гуевый браузер (Konqueror и Nautilus) и консоль.

DimkaS
Feuerbach

find dir -type f -exec chmod -x {} +

Или если хочется с xargs, см. пример в man find.

rgo мне уже всё объяснил, но всё равно, спасибо.