Re: Кириллица в латынь
В сообщении от 1108326410 секунд после начала Эпохи Unix Вы написали:
> - начало файла -
> #!/usr/bin/perl
> open(LIST, "ls -1 DVD/*|") || die "ERROR";
> while(<LIST>){
> /\A(.*?)\n/;
> $_ = $1;
Проще сделать chomp.
> $oldname = $_;
> tr/[АБВГДЕЖЗИКЛМНОПРСТУФХЦ]/[ABVGDEJZIKLMNOPRSTUFHC]/;
> tr/[абвгдежзиклмнопрстуфхц]/[abvgdejziklmnoprstufhc]/;
> $newname = $_;
> `mv $oldname $newname`
Его заглючит на именах, содержащих пробел.
Будут выдаваться ошибки для имен без кириллических букв.
> }
> close(LIST);
> - конец файла -
rename-to-translit #!/usr/bin/perl
unless (@ARGV) {
print "Usage: $0 filename...\n";
exit 1
}
for (@ARGV) {
$oldname = $_;
$_ = `echo "$_" |iconv -t koi8-r`;
next if ($? != 0);
chomp;
s/[\xc0-\xdf]/chr(ord($&)-0x60)/eg;
s/[\xe0-\xff]/chr(ord($&)-0xA0)/eg;
system("mv \"$oldname\" \"$_\"")
unless ($oldname eq $_);
}
Использовать:
$ rename-to-translit Вот_те_на.mp3
$ rename-to-translit "Вот те на.mp3"
$ find /my/mp3/files -type f -exec rename-to-translit \{\} \;
$ find /my/mp3/files -depth -exec rename-to-translit \{\} \;