LINUX.ORG.RU

АААААААА блин линуха под руками нету
но алгоритм такой

cd dir
a=`ls` | rename $a `echo $a | iconf -f cp1251 -t koi8-r`

anonymous
()
Ответ на: комментарий от anonymous

А ещё есть варианты? Кажется, gr_buza делал какой-то подобный скрипт, но результат не выложил ;) хочется посмотреть, что у него там получилось ... Не хочется с нуля писать. Явно кто-то уже мучался.

anonymous
()
Ответ на: комментарий от anonymous

не проще с правильной nls/кодировкой монтировать?
макросы FOREACH_FILE и DONE напиши сам, в качестве упражнения
(man ls и examples из bash)


FOREACH_FILE $dir
$new_name=iconv -f cp1251 -t koi8-r "$name"
mv "$name" "$new_name"
DONE

anonymous
()
Ответ на: комментарий от anonymous

>не проще с правильной nls/кодировкой монтировать?
:) Ну, дорогой, не так всё просто :) Я перешёл с кои8 на ср1251, а кое-какие файлы в старой кодировке были на русском. Вот и приходится теперь иногда переделывать название файлов.

>$new_name=iconv -f cp1251 -t koi8-r "$name"
Что касается этого - дык он мне перекодирует файл! А мне надо просто изменить название файлов. Понимаешь разницу? man iconv.

Спасибо конечно за советы ...
Но вот что у меня в итоге получилось (исправления приветствуются!):

find . -type f -depth | while read f ; do
fenc=`echo $f | iconv -f koi8r -t cp1251`
mv "$f" "$fenc"
done

anonymous
()
Ответ на: комментарий от gr_buza

2gr_buza:
Дык нашёл ... а ты можешь положить сюда скрипт, который у тебя в результате получился? Там он вроде понавороченнее был, только недоделанный :( У меня он не пошёл ...

anonymous
()

#!/usr/bin/perl -w

use strict;
use File::Find;
use Encode 'from_to';

finddepth \&doit, shift;

sub doit
{
    my $n = $_;
    from_to($n, "cp1251", "koi8-r");
    rename($_, $n) if $_ ne $n;
}

====

запускать:

./script dirname

anonymous
()
Ответ на: комментарий от gr_buza

>find /var/ftp/pub -depth | while read f ; do 
>fenc=`iconv -f cp1251 -t koi8r <<<"${f##*/}"` || continue 
>test "${f##*/}" = "$fenc" || mv "$f" "${f%/*}/$fenc" 
>done

./wkrecode: command substitution: line 1: syntax error near unexpected token `<<<"'
./wkrecode: command substitution: line 1: `iconv -f koi8r -t cp1251 <<<"${f##*/}"'
./wkrecode: command substitution: line 1: syntax error near unexpected token `<<<"'
./wkrecode: command substitution: line 1: `iconv -f koi8r -t cp1251 <<<"${f##*/}"'
./wkrecode: command substitution: line 1: syntax error near unexpected token `<<<"'
./wkrecode: command substitution: line 1: `iconv -f koi8r -t cp1251 <<<"${f##*/}"'
./wkrecode: command substitution: line 1: syntax error near unexpected token `<<<"'
./wkrecode: command substitution: line 1: `iconv -f koi8r -t cp1251 <<<"${f##*/}"'
./wkrecode: command substitution: line 1: syntax error near unexpected token `<<<"'
./wkrecode: command substitution: line 1: `iconv -f koi8r -t cp1251 <<<"${f##*/}"'
./wkrecode: command substitution: line 1: syntax error near unexpected token `<<<"'
./wkrecode: command substitution: line 1: `iconv -f koi8r -t cp1251 <<<"${f##*/}"'
./wkrecode: command substitution: line 1: syntax error near unexpected token `<<<"'
./wkrecode: command substitution: line 1: `iconv -f koi8r -t cp1251 <<<"${f##*/}"'

Что-то не очень работает ....

anonymous
()
Ответ на: комментарий от anonymous

Это у тебы быш староват '<<<' не поддерживает. В этом случае нужно заменить команды вида
"а <<< b"
на
"echo b | a"

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.