конвертация кодировки в именах файлов

classic Classic list List threaded Threaded
20 messages Options
Reply | Threaded
Open this post in threaded view
|

конвертация кодировки в именах файлов

Vladimir L. Antipov
Hi, All!

 Локаль koi8-r, по фтп залито много файлов с оффтопа в кодировке 1251.
 Подскажите, как/чем конвертнуть имена файлов в нужную кодировку?



--
Yours faithfully, Vladimir L. Antipov
the engineer-programmer, "IC Sampo.ru" СС
mailto:[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Stanislav Kruchinin
Vladimir L. Antipov wrote:
>  Локаль koi8-r, по фтп залито много файлов с оффтопа в кодировке 1251.
>  Подскажите, как/чем конвертнуть имена файлов в нужную кодировку?
>

Странный вопрос. Эту задачу решает известная программа convmv, но она не
специфична для OpenBSD.


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Igor Grabin
In reply to this post by Vladimir L. Antipov
On Thu, Aug 20, 2009 at 12:14:14PM +0400, Vladimir L. Antipov wrote:
>  Локаль koi8-r, по фтп залито много файлов с оффтопа в кодировке 1251.
>  Подскажите, как/чем конвертнуть имена файлов в нужную кодировку?

я всегда применял нечто в духе:

for file in `find . -type f`; do mv "$file" \
 "`echo $file | iconv -cs -f cp1251 -t koi8-r`"; done

achtung! хрен сработает с файлом, у которого в имени есть пробелы.
кстате, shell-эксперты не подскажут, как вышеозначенную конструкцию
переработать, чтобы и на файлах с пробелами оно работало? :-)
этот вопрос мироздания у меня лениво чешется последние лет пять :-)

--
Igor "CacoDem0n" Grabin, http://violent.death.kiev.ua/


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Alexander Yurchenko-3
In reply to this post by Vladimir L. Antipov
On Thu, Aug 20, 2009 at 12:14:14PM +0400, Vladimir L. Antipov wrote:
> Hi, All!
>
>  Локаль koi8-r, по фтп залито много файлов с оффтопа в кодировке 1251.
>  Подскажите, как/чем конвертнуть имена файлов в нужную кодировку?

shell + d1489

>
>
>
> --
> Yours faithfully, Vladimir L. Antipov
> the engineer-programmer, "IC Sampo.ru" СС
> mailto:[hidden email]
>

--
Alexander Yurchenko


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Dinar Talypov
In reply to this post by Vladimir L. Antipov
On Thu, 20 Aug 2009 12:14:14 +0400
"Vladimir L. Antipov" <[hidden email]> wrote:

> Hi, All!
>
>  Локаль koi8-r, по фтп залито много файлов с оффтопа в кодировке 1251.
>  Подскажите, как/чем конвертнуть имена файлов в нужную кодировку?
>
>
/usr/ports/converters/iconv и cp(1),
по вкусу можно еще добавить xargs(1) и find(1)


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Alexander Yurchenko-3
In reply to this post by Igor Grabin
On Fri, Aug 21, 2009 at 11:26:24AM +0300, Igor Grabin wrote:

> On Thu, Aug 20, 2009 at 12:14:14PM +0400, Vladimir L. Antipov wrote:
> >  Локаль koi8-r, по фтп залито много файлов с оффтопа в кодировке 1251.
> >  Подскажите, как/чем конвертнуть имена файлов в нужную кодировку?
>
> я всегда применял нечто в духе:
>
> for file in `find . -type f`; do mv "$file" \
>  "`echo $file | iconv -cs -f cp1251 -t koi8-r`"; done
>
> achtung! хрен сработает с файлом, у которого в имени есть пробелы.
> кстате, shell-эксперты не подскажут, как вышеозначенную конструкцию
> переработать, чтобы и на файлах с пробелами оно работало? :-)

Переменные в кавычки заключать.

> этот вопрос мироздания у меня лениво чешется последние лет пять :-)
>
> --
> Igor "CacoDem0n" Grabin, http://violent.death.kiev.ua/
>

--
Alexander Yurchenko


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Igor Grabin
On Fri, Aug 21, 2009 at 04:41:11PM +0400, Alexander Yurchenko wrote:

> On Fri, Aug 21, 2009 at 11:26:24AM +0300, Igor Grabin wrote:
> > On Thu, Aug 20, 2009 at 12:14:14PM +0400, Vladimir L. Antipov wrote:
> > >  Локаль koi8-r, по фтп залито много файлов с оффтопа в кодировке 1251.
> > >  Подскажите, как/чем конвертнуть имена файлов в нужную кодировку?
> > я всегда применял нечто в духе:
> > for file in `find . -type f`; do mv "$file" \
> >  "`echo $file | iconv -cs -f cp1251 -t koi8-r`"; done
> > achtung! хрен сработает с файлом, у которого в имени есть пробелы.
> > кстате, shell-эксперты не подскажут, как вышеозначенную конструкцию
> > переработать, чтобы и на файлах с пробелами оно работало? :-)
> Переменные в кавычки заключать.
мы друг друга не поняли.

переменная file не будет принимать значений в духе "какой-то файл" - она
будет сначала "какой-то", потом "файл". за сим эту переменную уже как
угодно можно заталкивать в кавычки :-((

--
Igor "CacoDem0n" Grabin, http://violent.death.kiev.ua/


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Alexander Yurchenko-3
On Fri, Aug 21, 2009 at 04:30:57PM +0300, Igor Grabin wrote:

> On Fri, Aug 21, 2009 at 04:41:11PM +0400, Alexander Yurchenko wrote:
> > On Fri, Aug 21, 2009 at 11:26:24AM +0300, Igor Grabin wrote:
> > > On Thu, Aug 20, 2009 at 12:14:14PM +0400, Vladimir L. Antipov wrote:
> > > >  Локаль koi8-r, по фтп залито много файлов с оффтопа в кодировке 1251.
> > > >  Подскажите, как/чем конвертнуть имена файлов в нужную кодировку?
> > > я всегда применял нечто в духе:
> > > for file in `find . -type f`; do mv "$file" \
> > >  "`echo $file | iconv -cs -f cp1251 -t koi8-r`"; done
> > > achtung! хрен сработает с файлом, у которого в имени есть пробелы.
> > > кстате, shell-эксперты не подскажут, как вышеозначенную конструкцию
> > > переработать, чтобы и на файлах с пробелами оно работало? :-)
> > Переменные в кавычки заключать.
> мы друг друга не поняли.
>
> переменная file не будет принимать значений в духе "какой-то файл" - она
> будет сначала "какой-то", потом "файл". за сим эту переменную уже как
> угодно можно заталкивать в кавычки :-((

-exec тогда заместо for.

>
> --
> Igor "CacoDem0n" Grabin, http://violent.death.kiev.ua/
>

--
Alexander Yurchenko


Reply | Threaded
Open this post in threaded view
|

unsubscribe openbsd

Роман Хлонь
unsubscribe openbsd


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Andrey N. Oktyabrski-2
In reply to this post by Igor Grabin
Igor Grabin wrote:
> for file in `find . -type f`; do mv "$file" \
>  "`echo $file | iconv -cs -f cp1251 -t koi8-r`"; done
>
> achtung! хрен сработает с файлом, у которого в имени есть пробелы.
> кстате, shell-эксперты не подскажут, как вышеозначенную конструкцию
> переработать, чтобы и на файлах с пробелами оно работало? :-)
> этот вопрос мироздания у меня лениво чешется последние лет пять :-)
Ты знаешь, я нашёл уже хрен знает сколько решений сей проблемы, но
каждый раз их забываю и делаю экспромтик. На сей раз пришло в голову
нечто подобное:
find . -type f \
   | sed "s/'/'\"'\"'/g" \
   | awk '{printf "mv \x27%s\x27 \"`echo \x27%s\x27 | iconv -f cp1251 -t
koi8-r`\"\n", $0, $0}' \
   | sh


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Andrey N. Oktyabrski-2
Andrey N. Oktyabrski wrote:
> find . -type f \
>   | sed "s/'/'\"'\"'/g" \
>   | awk '{printf "mv \x27%s\x27 \"`echo \x27%s\x27 | iconv -f cp1251 -t
> koi8-r`\"\n", $0, $0}' \
>   | sh
Точнее, так:
find . -type f \
   | sed "s/'/'\"'\"'/g" \
   | awk '{printf "mv \x27%s\x27 `echo \x27%s\x27 | iconv -f cp1251 -t
koi8-r`\n", $0, $0}' \
   | sh


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

4625
In reply to this post by Igor Grabin
On Fri, 21 Aug 2009, Igor Grabin wrote:

> achtung! хрен сработает с файлом, у которого в имени есть пробелы.

http://gprename.sourceforge.net/

--
4625


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

4625
In reply to this post by Igor Grabin
On Fri, 21 Aug 2009, Igor Grabin wrote:

> achtung! хрен сработает с файлом, у которого в имени есть пробелы.

Вдогонку... Задача решается скриптом на rexx, буквально, за 3 минуты.

address SYSTEM 'find ./ -type f' WITH OUTPUT STEM list.
do a = 1 to list.0
  address SYSTEM 'mv' '"' || list.a || '"' '"' || changestr(' ', list.a, '_') || '"'
end a

--
4625


Reply | Threaded
Open this post in threaded view
|

Re[2]: конвертация кодировки в именах файлов

Vladimir L. Antipov
In reply to this post by Andrey N. Oktyabrski-2
Hi Andrey,

Saturday, August 22, 2009, 1:31:35 AM, you wrote:

ANO> Andrey N. Oktyabrski wrote:
>> find . -type f \
>>   | sed "s/'/'\"'\"'/g" \
>>   | awk '{printf "mv \x27%s\x27 \"`echo \x27%s\x27 | iconv -f cp1251 -t
>> koi8-r`\"\n", $0, $0}' \
>>   | sh
ANO> Точнее, так:
ANO> find . -type f \
ANO>    | sed "s/'/'\"'\"'/g" \
ANO>    | awk '{printf "mv \x27%s\x27 `echo \x27%s\x27 | iconv -f cp1251 -t
ANO> koi8-r`\n", $0, $0}' \
ANO>    | sh


файлы с пробелами так и не пережёвывет :(


--
Yours faithfully, Vladimir L. Antipov
the engineer-programmer, "IC Sampo.ru" СС
mailto:[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re[3]: конвертация кодировки в именах файлов

Vladimir L. Antipov
Hi Vladimir,

Wednesday, August 26, 2009, 2:58:20 PM, you wrote:

VLA> Hi Andrey,

VLA> Saturday, August 22, 2009, 1:31:35 AM, you wrote:

ANO>> Andrey N. Oktyabrski wrote:
>>> find . -type f \
>>>   | sed "s/'/'\"'\"'/g" \
>>>   | awk '{printf "mv \x27%s\x27 \"`echo \x27%s\x27 | iconv -f cp1251 -t
>>> koi8-r`\"\n", $0, $0}' \
>>>   | sh
ANO>> Точнее, так:
ANO>> find . -type f \
ANO>>    | sed "s/'/'\"'\"'/g" \
ANO>>    | awk '{printf "mv \x27%s\x27 `echo \x27%s\x27 | iconv -f cp1251 -t
ANO>> koi8-r`\n", $0, $0}' \
ANO>>    | sh


VLA> файлы с пробелами так и не пережёвывет :(

в принципе решается действительно просто:

#!/bin/sh
for i in *
do
mv "$i" "`echo $i | iconv -f CP1251 -t KOI8-R`"
done

Ещё хотелось бы добавить ньюанс - если кодировка файла уже KOI8-R - то
не  производить конвертацию.. а вот как этот факт проверить - не пойму
:(


--
Yours faithfully, Vladimir L. Antipov
the engineer-programmer, "IC Sampo.ru" СС
mailto:[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Alexander Yurchenko-3
On Wed, Aug 26, 2009 at 03:08:09PM +0400, Vladimir L. Antipov wrote:
> Ещё хотелось бы добавить ньюанс - если кодировка файла уже KOI8-R - то
> не  производить конвертацию.. а вот как этот факт проверить - не пойму
> :(

Частотным анализом :)

>
>
> --
> Yours faithfully, Vladimir L. Antipov
> the engineer-programmer, "IC Sampo.ru" СС
> mailto:[hidden email]
>

--
Alexander Yurchenko


Reply | Threaded
Open this post in threaded view
|

Re[2]: конвертация кодировки в именах файлов

Vladimir L. Antipov
Hi Alexander,

Wednesday, August 26, 2009, 3:12:58 PM, you wrote:

AY> On Wed, Aug 26, 2009 at 03:08:09PM +0400, Vladimir L. Antipov wrote:
>> Ещё хотелось бы добавить ньюанс - если кодировка файла уже KOI8-R - то
>> не  производить конвертацию.. а вот как этот факт проверить - не пойму
>> :(

AY> Частотным анализом :)

Хорошо, что не спектральным :)

 А всё-таки, есть решения?

--
Yours faithfully, Vladimir L. Antipov
the engineer-programmer, "IC Sampo.ru" СС
mailto:[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Grigoriy Orlov-4
On Wed, Aug 26, 2009 at 03:32:00PM +0400, Vladimir L. Antipov wrote:

> Hi Alexander,
>
> Wednesday, August 26, 2009, 3:12:58 PM, you wrote:
>
> AY> On Wed, Aug 26, 2009 at 03:08:09PM +0400, Vladimir L. Antipov wrote:
> >> Ещё хотелось бы добавить ньюанс - если кодировка файла уже KOI8-R - то
> >> не  производить конвертацию.. а вот как этот факт проверить - не пойму
> >> :(
>
> AY> Частотным анализом :)
>
> Хорошо, что не спектральным :)

Зря смеетесь, grange@ правильно сказал. Если не нравится, то можно еще
конвертить во все доступные варианты и со словарем сравнивать ;)

 Лет 12 назад я писал программульку для конвертирования кодировок.
Просьба не пинать, если в ней что-то криво.

        ftp://www.openbsd.ru/pub/OpenBSD/local/misc/convert.tgz

Там есть небольшая функция codepage_detect, она не плохо работает, но может
давать сбои на коротких фразах или если текст состоит преимущественно
из заглавных букв. Я даже спустя годы понял как она работает !
 
        /gluk


Reply | Threaded
Open this post in threaded view
|

Re: конвертация кодировки в именах файлов

Stanislav Kruchinin
Grigoriy Orlov wrote:
>> AY> Частотным анализом :)
>>
>> Хорошо, что не спектральным :)
>
> Зря смеетесь, grange@ правильно сказал. Если не нравится, то можно еще
> конвертить во все доступные варианты и со словарем сравнивать ;)

Словарь -- это слишком примитивно и медленно. Для коротких текстов лучше
подойдет алгоритм на основе таблицы допустимых сочетаний букв.
http://ivr.webzone.ru/articles/defcod_2/index.htm


Reply | Threaded
Open this post in threaded view
|

Re[3]: конвертация кодировки в именах файлов

4625
In reply to this post by Vladimir L. Antipov
On Wed, 26 Aug 2009, Vladimir L. Antipov wrote:

> ANO>> Точнее, так:
> ANO>> find . -type f \
> ANO>>    | sed "s/'/'\"'\"'/g" \
> ANO>>    | awk '{printf "mv \x27%s\x27 `echo \x27%s\x27 | iconv -f cp1251 -t
> ANO>> koi8-r`\n", $0, $0}' \
> ANO>>    | sh
>
> VLA> файлы с пробелами так и не пережёвывет :(
Я уже предложил проверенное решение на rexx - запостил скрипт.

> в принципе решается действительно просто:
Просто. Только не рекурсивно.

> #!/bin/sh
> for i in *
>
> Ещё хотелось бы добавить ньюанс - если кодировка файла уже KOI8-R - то
> не  производить конвертацию.. а вот как этот факт проверить - не пойму
> :(

Если содержимое файла имеет некоторую шаблонность, то можно проверить.

--
4625