URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6598
[ Назад ]

Исходное сообщение
"хитрое преобразование кодировки для архива"

Отправлено Cyrus_user , 11-Июл-07 16:24 
Привет.
делаю архив:
zip -q data.zip `find /path/data -type f \( -iregex ".*/extforms/prnforms/.*" \)

но мне нужно, чтобы названия файлов переконвертировались в другую кодировку, конкретно в dos и уже в архиве лежали в новой кодировке (только названия).
уже и так и сяк вокруг iconv -f KOI8R -t CP866, xargs, mv и тп, не выходит каменный цветок.

Направте в нужное русло плиз.


Содержание

Сообщения в этом обсуждении
"хитрое преобразование кодировки для архива"
Отправлено Cyrus_user , 12-Июл-07 08:52 
вот честно скозь маны  и практику пытался понять, в чём прелесть find...
regexp в find не умеет работать с кириллицей да и \x80-\x99 он тоже не понимает.


"хитрое преобразование кодировки для архива"
Отправлено Forth , 12-Июл-07 09:30 
>вот честно скозь маны  и практику пытался понять, в чём прелесть
>find...
>regexp в find не умеет работать с кириллицей да и \x80-\x99 он
>тоже не понимает.
Почему не умеет? Умеет. Локаль должна быть правильно выставлена.


"хитрое преобразование кодировки для архива"
Отправлено Cyrus_user , 12-Июл-07 13:59 
>>вот честно скозь маны  и практику пытался понять, в чём прелесть
>>find...
>>regexp в find не умеет работать с кириллицей да и \x80-\x99 он
>>тоже не понимает.
>Почему не умеет? Умеет. Локаль должна быть правильно выставлена.

наверно я плохо читал man
$touch рус.txt
$touch rus.txt
$find -type f -regex ".*[a-z]+\.txt"
$./rus.txt
$ find -type f -regex ".*[а-я]+\.txt"
$
что-то не сработало, где у меня ошибка? или мне нужно так: а?б?в?..ю?я?
$ find -type f -regex ".*рус\.txt"
./рус.txt


"хитрое преобразование кодировки для архива"
Отправлено Forth , 12-Июл-07 14:18 
>>>вот честно скозь маны  и практику пытался понять, в чём прелесть
>>>find...
>>>regexp в find не умеет работать с кириллицей да и \x80-\x99 он
>>>тоже не понимает.
>>Почему не умеет? Умеет. Локаль должна быть правильно выставлена.
>
>наверно я плохо читал man
>$touch рус.txt
>$touch rus.txt
>$find -type f -regex ".*[a-z]+\.txt"
>$./rus.txt
>$ find -type f -regex ".*[а-я]+\.txt"
>$
>что-то не сработало, где у меня ошибка? или мне нужно так: а?б?в?..ю?я?
>
>$ find -type f -regex ".*рус\.txt"
>./рус.txt
Тут уже что-то связанное с тонкостями указания кириллических диапазонов в регексах.
По ".*рус\.txt" же находит?


"хитрое преобразование кодировки для архива"
Отправлено Cyrus_user , 13-Июл-07 05:47 
>>>>вот честно скозь маны  и практику пытался понять, в чём прелесть
>>>>find...
>>>>regexp в find не умеет работать с кириллицей да и \x80-\x99 он
>>>>тоже не понимает.
>>>Почему не умеет? Умеет. Локаль должна быть правильно выставлена.
>>
>>наверно я плохо читал man
>>$touch рус.txt
>>$touch rus.txt
>>$find -type f -regex ".*[a-z]+\.txt"
>>$./rus.txt
>>$ find -type f -regex ".*[а-я]+\.txt"
>>$
>>что-то не сработало, где у меня ошибка? или мне нужно так: а?б?в?..ю?я?
>>
>>$ find -type f -regex ".*рус\.txt"
>>./рус.txt

>Тут уже что-то связанное с тонкостями указания кириллических диапазонов в регексах.
>По ".*рус\.txt" же находит?

это я показал что локаль настроена

мне кажется regexp в find просто недореализован.. типа вот вам |xargs egrep bla-bla. но о тяжёлых конструкциях можно забыть.


"хитрое преобразование кодировки для архива"
Отправлено phpcoder , 12-Июл-07 09:01 
[...]
>Направте в нужное русло плиз.

Поищите на форуме. Я где-то уже натыкался на вопрос про find + iconv
Ну и, видимо, придётся действовать в несколько этапов: найти файлы, перенести во временный каталог с переименованием, а потом уже запаковать этот временный каталог в архив. Я бы так делал.



"хитрое преобразование кодировки для архива"
Отправлено A , 12-Июл-07 09:19 
>Привет.
>делаю архив:
>zip -q data.zip `find /path/data -type f \( -iregex ".*/extforms/prnforms/.*" \)
>
>но мне нужно, чтобы названия файлов переконвертировались в другую кодировку, конкретно в
>dos и уже в архиве лежали в новой кодировке (только названия).
>
>уже и так и сяк вокруг iconv -f KOI8R -t CP866, xargs,
>mv и тп, не выходит каменный цветок.
>
>Направте в нужное русло плиз.

я в таких случаях их просто сперва переменовываю (хотя можно наверно и проще). сейчас скрипта нет под рукой, но выглядит примерно так:
find -d /dir -exec mv "{}" `echo {} | iconv -f KOI8R -t CP866` \;
главное -d, чтобы он сперва пробегал по директории и только потом переименовывал саму директорию.
НЕ ЗАПУСКАЙТЕ ВСЛЕПУЮ, я это строчку по памяти написал, мог наколбасить :-)


"хитрое преобразование кодировки для архива"
Отправлено Cyrus_user , 12-Июл-07 13:50 
>>Привет.
>>делаю архив:
>>zip -q data.zip `find /path/data -type f \( -iregex ".*/extforms/prnforms/.*" \)
>>
>>но мне нужно, чтобы названия файлов переконвертировались в другую кодировку, конкретно в
>>dos и уже в архиве лежали в новой кодировке (только названия).
>>
>>уже и так и сяк вокруг iconv -f KOI8R -t CP866, xargs,
>>mv и тп, не выходит каменный цветок.
>>
>>Направте в нужное русло плиз.
>
>я в таких случаях их просто сперва переменовываю (хотя можно наверно и
>проще). сейчас скрипта нет под рукой, но выглядит примерно так:
>find -d /dir -exec mv "{}" `echo {} | iconv -f KOI8R
>-t CP866` \;
>главное -d, чтобы он сперва пробегал по директории и только потом переименовывал
>саму директорию.
>НЕ ЗАПУСКАЙТЕ ВСЛЕПУЮ, я это строчку по памяти написал, мог наколбасить :-)
>

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

спасибо всем.



"хитрое преобразование кодировки для архива"
Отправлено Rey , 12-Июл-07 09:23 
>Привет.
>делаю архив:
>zip -q data.zip `find /path/data -type f \( -iregex ".*/extforms/prnforms/.*" \)
>
>но мне нужно, чтобы названия файлов переконвертировались в другую кодировку, конкретно в
>dos и уже в архиве лежали в новой кодировке (только названия).
>
>уже и так и сяк вокруг iconv -f KOI8R -t CP866, xargs,
>mv и тп, не выходит каменный цветок.
>
>Направте в нужное русло плиз.

важно переконвертировать названия или распаковать на другой оси с нормальными именами? если второе, то можно использовать rar. у него имена в уникоде храняться...проблем быть не должно.