Ivanovo Linux Users Group - Not logged in
Forum Help Search Login
Previous Next Up Topic Софт / Программное обеспечение / Архивы + Русские названия файлов (6231 hits)
- By MaxyS Date 01.06.05 07:14
Есть архивы zip созданные в винде, в них файлы лежать с русскими названиями. Пробую их открывать в названия не читаются(каракули).
Как мне енто дело распаковать нормально(винду не предлагать%) )
Parent By MaxyS Date 01.06.05 14:30
Уже разебрался методом wine
Parent - By LOE (Site/forum admin) Date 01.06.05 17:47
Да, если действовать нативно - то русские имена файлов теряются
Как выход - юзать RAR - там в юникоде имена
Или распаковать, а потом скриптиком через iconv переименовать (осторожно, если есть пробелы в именах)
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent By MaxyS Date 02.06.05 05:16
Вот насчет второго варианта пробовал, думали всем каналом #Linux но так и не получилося...
Parent - By cutter Date 27.07.05 15:52
Олег, а как именно Вы предлагаете iconv'ом имена файлов конвертировать? Может быть все очень просто? А то, тут было начал писать скриптик для этого, но что-то так и не доделал, бросил; если действительно нужно будет, доделаю. Идея была такова:
ls dir/                                       -> в первый массв;
ls dir/ | iconv -f cp1251 -t koi8-r   -> во второй массив;
Перед пробелами в элементах каждого из массивов ставим бэкслэш: $var =~ s/\s/\\ /g
И, одновременно, перебираем названия файлов в массивах, переименовывая при этом...
Parent - By LOE (Site/forum admin) Date 27.07.05 17:56
Такие скрипты пишутся "на коленке за 5 минут" включая тестирование ;-)
Вот скриптик на перле, хотя используется вызов внешних программ. Можно сделать вообще средствами только перла, но для этого надо модуль конвертации заюзать, который надо ставить дополнительно.

#!/usr/bin/perl

$Dir='1';

opendir(DIR, $Dir) || die "can't opendir $Dir: $!";
@files = grep { /^[^\.]/ && -f "$Dir/$_" } readdir(DIR);
closedir DIR;

foreach my $old (@files) {
        $new=`echo -n $old | iconv -f windows-1251 -t koi8-r`;
        if ($old ne $new) {
                `mv "$Dir/$old" "$Dir/$new"`;
        }
}

Скрипт без рекурсии, поэтому вложенные каталоги не обработаются.
Если это нужно - юзать или модуль FileFind перла, или список файлов-каталогов получить системным find'ом.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent By cutter Date 27.07.05 20:07
Да, я понимаю, что "на коленке за 5 минут" Но, у меня слишком мало знаний и опыта, что бы делать именно так :-)
В идеале, вообще была задумка написать скрипт, пользующийся своими кодовыми таблицами, без вызовов внешних программ; с рекурсией; с возможностью распознания исходной кодировки и возможностью расшифровки имен файлов, прошедших многократную перекодировку (смотрим с кодировкой локали koi8-r на  нечто подобное: cp866 -> cp1251 -> utf8) и т.д. Сколько идей остаются лишь мечтами, уходя в пустоту, благодаря лени.. :-)
Previous Next Up Topic Софт / Программное обеспечение / Архивы + Русские названия файлов (6231 hits)

Powered by mwForum 2.12.0 © 1999-2007 Markus Wichitill

Page created in 0.308s with 10 database queries.