The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"перекодировка имени"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"перекодировка имени"
Сообщение от tenzor Искать по авторуВ закладки on 21-Сен-04, 15:59  (MSK)
Во Фре 4 есть каталог с русским именем, в нем много файлов, тоже с русскими именами, однако из-за всяких недоделок все имена оказались в кодировке win1251, хочу перевести в KOI8-R, то есть неправильно отображаются. Наваял скрипт:

for i in `ls -1wR`;
   do mv "'$i'" `echo "'$i'" | /usr/local/bin/iconv -f CP1251 -t KOI8-R`;
done

То есть каждый файл из вывода команды ls перемещается в новый файл с перекодированным именем.
Все бы хорошо, но имена файлов содержат пробелы, из-за этого получается, что для файла с названием 'фото 1.jpg' появляются две переменные 'фото' и '1.jpg'. Как побороть, не знаю. По идее, надо как-то сообщить, что разделителем служит не пробел, а перевод строки.
У кого какие мысли? Заранее благодарен.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "перекодировка имени"
Сообщение от klalafuda emailИскать по авторуВ закладки on 21-Сен-04, 18:31  (MSK)
>Во Фре 4 есть каталог с русским именем, в нем много файлов,
>тоже с русскими именами, однако из-за всяких недоделок все имена оказались
>в кодировке win1251, хочу перевести в KOI8-R, то есть неправильно отображаются.
>Наваял скрипт:
>
>for i in `ls -1wR`;
>   do mv "'$i'" `echo "'$i'" | /usr/local/bin/iconv -f CP1251
>-t KOI8-R`;
>done
>
>То есть каждый файл из вывода команды ls перемещается в новый файл
>с перекодированным именем.
>Все бы хорошо, но имена файлов содержат пробелы, из-за этого получается, что
>для файла с названием 'фото 1.jpg' появляются две переменные 'фото' и
>'1.jpg'. Как побороть, не знаю. По идее, надо как-то сообщить, что
>разделителем служит не пробел, а перевод строки.
>У кого какие мысли? Заранее благодарен.

взять `echo "'$i'" | /usr/local/bin/iconv -f CP1251 -t KOI8-R` в двойные кавычки?

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "перекодировка имени"
Сообщение от lavr emailИскать по авторуВ закладки on 22-Сен-04, 10:48  (MSK)
>>Во Фре 4 есть каталог с русским именем, в нем много файлов,
>>тоже с русскими именами, однако из-за всяких недоделок все имена оказались
>>в кодировке win1251, хочу перевести в KOI8-R, то есть неправильно отображаются.
>>Наваял скрипт:
>>
>>for i in `ls -1wR`;
>>   do mv "'$i'" `echo "'$i'" | /usr/local/bin/iconv -f CP1251
>>-t KOI8-R`;
>>done
>>
>>То есть каждый файл из вывода команды ls перемещается в новый файл
>>с перекодированным именем.
>>Все бы хорошо, но имена файлов содержат пробелы, из-за этого получается, что
>>для файла с названием 'фото 1.jpg' появляются две переменные 'фото' и
>>'1.jpg'. Как побороть, не знаю. По идее, надо как-то сообщить, что
>>разделителем служит не пробел, а перевод строки.
>>У кого какие мысли? Заранее благодарен.
>
>взять `echo "'$i'" | /usr/local/bin/iconv -f CP1251 -t KOI8-R` в двойные кавычки?
>

бред (без обид)

парень получает строковый массив через ls (имена файлов)

допустим у нас файлы: aaa, bbb, ccc
массив будет {aaa bbb ccc}, если в именах файлов пробелы:
aaa, "bb b", "c cc", массив получится НЕ ИЗ ТРЕХ элементов, а:
{ aaa bb b c cc } - так что предложение мягко говоря бестолковое, хоть
мульон кавычек.

подсказка такая, например найти старый пакет kermit'а и взять оттуда и
поправить под себя утилиту конвертации имен файлов и директорий xxu.c
- я так для себя сделал и выложид на свою страницу, к сожалению страница
умерла.

другой вариант, использовать ls -m
например попробуй:

[alone]~/test > ls -la
total 28
drwxr-xr-x   2 lavr  sysct    512 21 сен 18:04 .
drwxr-xr-x  77 lavr  sysct  21504 22 сен 10:31 ..
-rw-r--r--   1 lavr  sysct      0 21 сен 17:40 111 222
-rw-r--r--   1 lavr  sysct      0 21 сен 17:40 333 444 555
-rw-r--r--   1 lavr  sysct      0 21 сен 17:40 666 77 99 00
-rw-r--r--   1 lavr  sysct      0 21 сен 17:40 ashdjfk asdfhjk
-rw-r--r--   1 lavr  sysct     62 21 сен 18:11 la
-rw-r--r--   1 lavr  sysct     49 21 сен 17:34 lala
[alone]~/test > ls -m | tr "," "\n" | sed -e "s/^ //" | tr " " "_"
111_222
333_444_555
666_77_99_00
ashdjfk_asdfhjk
la
lala
[alone]~/test >

вот тебе массив без пробелов, они заменены на "_"
Sorry, коряво и некрасиво, просто сразу навскидку за x-секунд пришло
в голову использование tr (man tr)
Можно sed+awk, самое красивое и гибкое будет наверное на perl'е

>// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "перекодировка имени"
Сообщение от Maxim Kuznetsov emailИскать по авторуВ закладки on 22-Сен-04, 11:24  (MSK)
>Во Фре 4 есть каталог с русским именем, в нем много файлов,
>тоже с русскими именами, однако из-за всяких недоделок все имена оказались
>в кодировке win1251, хочу перевести в KOI8-R, то есть неправильно отображаются.
>Наваял скрипт:
>
>for i in `ls -1wR`;
>   do mv "'$i'" `echo "'$i'" | /usr/local/bin/iconv -f CP1251
>-t KOI8-R`;
>done
>
>То есть каждый файл из вывода команды ls перемещается в новый файл
>с перекодированным именем.
>Все бы хорошо, но имена файлов содержат пробелы, из-за этого получается, что
>для файла с названием 'фото 1.jpg' появляются две переменные 'фото' и
>'1.jpg'. Как побороть, не знаю. По идее, надо как-то сообщить, что
>разделителем служит не пробел, а перевод строки.
>У кого какие мысли? Заранее благодарен.
function reconv {
for i in * ; do
if [ -f $i ] ; then
   $name=`echo $i | iconv -f CP1251 -t KOI8-R`
   mv $i $name
elif [ -d $i ] ; then
   cd $i
   reconv
   cd ..
fi
done
}
кстати переименовывать их лучше в другой каталог, а потом уже результат переносить на место, потому-что если например будут два файла - один "бНОПНЯ.txt" а второй "вопрос.txt" то выживет только один

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "перекодировка имени"
Сообщение от newser Искать по авторуВ закладки on 22-Сен-04, 12:13  (MSK)
>function reconv {
>for i in * ; do
> if [ -f $i ] ; then
>   $name=`echo $i | iconv -f CP1251 -t KOI8-R`
>   mv $i $name
> elif [ -d $i ] ; then
>   cd $i
>   reconv
>   cd ..
> fi
>done
>}

Строку
  mv $i $name
лучше записать так:
  mv "$i" "$name"
иначе опять возникнут проблемы с пробелами.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру