LinuxForum.Fans
Тема

Windows russian filenames

Автор: vux 18 сообщений 4297 просмотров
#221017

Вообщем слетела винда у сестры. Не грузиться никак. Решил ставить ей все с нуля - но перед этим нужно было сохранить очень важную папку.
Поскольку винда не грузилась ни в какую я загрузился с system rescue cd.
Подмонтировал раздел с помощью ntfs-3g. Эту папку сжал в tar.gz и скинул на безопасный раздел.
Установил винду - распаковал архив а там как всегда - имена файлов кракозябрами.
Это много вордовских файлов - имена которых очень нужно восстановить.
Погуглив нихрена так и не сделал. Пишут что нтфс какбы на utf-8 и я думал что проблем с русским не будет.
Посоветуйте что мне делать. Очень важная информация

#221053

Загрузитесь с SystemRescueCD, смонтируйте безопасный и NTFS разделы, распакуйте архив.
NTFS действительно использует для хранения имён файлов Unicode (это не значит UTF-8, если правильно путаю -- UCS2).

#221092

А если я распаковавши удалил тот архив - и файлы сейчас на нтфс-е распакованные.
Может еще есть способы?

#221100

NTFS как бы на cp1251, монтируйте с указанием этой кодировки.

#221114
vux написал:
А если я распаковавши удалил тот архив - и файлы сейчас на нтфс-е распакованные.

Тогда, для предположения о способе неправильного перекодирования, покажите для пары файлов результат
[console]
$ ls "кривое имя файла" | hexdump -C
[/console]Если при этом назовёте что должно было быть -- вообще замечательно.

После определения правильного способа обратного преобразования, натрАвите на дерево convmv, предварительно забэкапив то, что есть.

#221117
kessian написал:
NTFS как бы на cp1251, монтируйте с указанием этой кодировки.

Не надо глупость говорить, ntfs использует utf8.

#221120

newzenon, использовать она его может, но дефолтная кодировка всё-таки cp1251, и созданные там файлы будут тоже в cp1251, уж поверьте win-админу :)

#221121
kessian написал:
newzenon, использовать она его может, но дефолтная кодировка всё-таки cp1251, и созданные там файлы будут тоже в cp1251, уж поверьте win-админу :)

proof в студию, верить win-админу совесть не позволяет.

#221124

newzenon, фигню сморозил в запале, простите. Для фс особой разницы в кодировках нету. А вот для ОС есть. Windows как раз cp1251 использует. Поэтому всё-таки монитровать надо с её указанием.

#221131

kessian, еще раз: Параметр locale отвечает не за кодировку, в которой хранятся имена файлов на монтируемой файловой системе, а за локаль самой системы.
Так что монтировать надо в той кодировке в которой работаешь, в той которую покажет команда locale, а т.к. уже везде в linux де-факто utf8, то и вывод ясен.

ы. Монтировать так:
FAT

text
mount -t vfat -o codepage=866,iocharset=utf8,quiet,umask=000 /dev/sdb2 /mnt/win1

NTFS

text
mount -t ntfs -o nls=utf8,umask=0,rw /dev/sbd2 /mnt/win1

Но в принципе все это по-умолчанию должно быть уже, в большинстве случаев итак:

text
mount /dev/sdb2 /mnt/win1

должно быть нормально.

ыы. Правила монтирования по умолчанию прописаны в cat /etc/udev/rules.d/99-mnt.rules

#221161
newzenon написал:
Но в принципе все это по-умолчанию должно быть уже, в большинстве случаев итак:

mount /dev/sdb2 /mnt/win1

На современных дистрах линукса да так, но не известно какой давности был тот system rescue cd у ТС и какое там ядро.

#221169

Vadimsky, ну в любом случае я объяснил. Пусть ТС загрузится и покажет вывод

text
locale

в зависимости от вывода и будет и будет параметр nls= при монтировании ntfs
или:

text
export | grep LANG
export | grep LC
#221398
bormant написал:
[quote=vux]А если я распаковавши удалил тот архив - и файлы сейчас на нтфс-е распакованные.

Тогда, для предположения о способе неправильного перекодирования, покажите для пары файлов результат
[console]
$ ls "кривое имя файла" | hexdump -C
[/console]Если при этом назовёте что должно было быть -- вообще замечательно.

После определения правильного способа обратного преобразования, натрАвите на дерево convmv, предварительно забэкапив то, что есть.[/quote]

text
ls|hexdump -c

0000000 221 245 340 245 246 240 \n 0000007

это так оно выдало на простое название папки "Сережа"

#221400

System Rescue CD предпоследний

#221453

что значит предпоследний?
uname -a в командной строке System Rescue CD покажите

#221491

vux,
1) "-C" была заглавной...
2) просил пару строк
Ну ладно, будем из 8-ричной переводить.

(): Сережа
(8): 221 245 340 245 246 240
(10): 145 165 224 165 166 160
(16): 91 A5 E0 A5 A6 A0

Это в cp866. Для проверки сделайте
[console]$ ls | iconv -f cp866[/console]должны увидеть все "по-русски".

Предварительно забэкапить, убедиться, что ФС смонтирована в UTF-8, русские имена файлов, созданных под Windows, видны правильно. Затем
[console]$ convmv -r -f cp866 -t UTF-8[/console]
и если всё нормально, то
[console]$ convmv -r -f cp866 -t UTF-8 --notest[/console]

Как-то так.

#221602

ls | iconv -f cp866
text
iconv: illegal input sequence at position 18
#221624

vux,
чего-то не договариваете. Можно, конечно,
[console]
$ ls | iconv -c -f cp866
[/console]Но!

Без вывода при смонтированном разделе
[console]# locale
# mount
# cd проблемный/каталог
# ls
# ls | hexdump -C[/console]дальнейшие предположения оставлю при себе. Это тот необходимый минимум, без которого даже уточняющие вопросы задавать не имеет смысла.

Войдите или зарегистрируйтесь, чтобы ответить.