Отправляет email-рассылки с помощью сервиса Sendsay

Переименование множества файлов с помощью for i in

Win32)

Привет!

При переносе архива в Линукс посучилось так, что имена файлов стали CP1251 кракозябрами.
Надо перекодировать их в KOI8. Я делаю так:

for i in `find . -type f`;do mv $i `echo $i | iconv -f CP1251 -t KOI8R`;done

И все бы ничего, если б не имена с пробелами. for i in * разбивает строку содержащую
пробелы на подстроки и получается, что вместо файла "file name.ext" я имею два
файла "file" и "name.ext".

Как выйти из этой ситуации и переименовать все файлы?

Ответить   Александр Артёмен ко Tue, 13 Apr 2004 11:11:03 +0400 (#124443)

 

Ответы:

Александр Артёмен ко wrote:

Вот for i in * как раз таки и не разбивает

Надо писать

mv "$i" "`echo $i | iconv -f CP1251 -t KOI8R`"

Обратите внимание на двойные кавычки.

Я сам использовал следующий скрипт:
#! /bin/bash

req='utf-8..koi8-r'

[[ $# == 1 ]] && req=$1

for x in *
do
if [[ -d "$x" ]]
then
cd "$x"
$0
cd ..
fi

mv "$x" "`echo \"$x\" | recode $req`" 2> /dev/null
done

Другой вариант (не пробовал)

find . -type f -exec mv "{}" "`echo \"{}\" | recode cp1251..koi8-r`" 2> /dev/null
';'

Ответить   Max Vasin Tue, 13 Apr 2004 12:01:33 +0400 (#124477)

 

i586-asplinux-linux-gnu)

В сообщении от Tue, 13 Apr 2004 11:11:03 +0400 Вы написали:

find . -depth -exec sh -c \
'k=`basename "{}"`;j=`dirname "{}"`/`echo -n "$k" |
iconv -f CP1251 -t KOI8R`; mv -f "{}" "$j"' \;

Ответить   Konstantin Korikov Wed, 14 Apr 2004 03:21:32 +0300 (#125010)

 

Tue, 13 Apr 2004 11:11:03 +0400
Александр Артёмен ко <art@c*****.ru> написал:

кракозябрами.

два

Ещё один вариант решения, он подходит не только для find:

find . -type f | (while read i; do mv "$i" ....; done)
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 6420; Возраст листа: 263; Участников: 1075
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/125570



-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Alex Suykov Wed, 14 Apr 2004 15:48:43 +0300 (#125570)