LINUX.ORG.RU

как сделать translit в названиях файлов


0

0

sorry за кривой subj, но не знаю как написать об этом кратко.
вообщем есть большое количество файлов с русскими именами.
нужно закатать это на СДР для автомагнитолы (МП3), но
магнитола не понимает русских букв. Поэтому мне нужны имена
файлов в транслите. Как это можно автоматизировать? Подозреваю,
что это делается с помощью iconv и возможно даже tr :O), но
вот только как?

anonymous

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

Из рассылки ALTLinux Community (только перекодировка koi8-r -> koi-7, читай транслит, засовывание оного в 'find -exec' оставляется в качестве упражнения):

Метод 1. iconv -f koi8-r -t koi-7

Метод 2. http://www.geocities.com/CapeCanaveral/Lab/5735/1/323.txt (на самом деле это перловый скрипт).

Obidos ★★★★★
()

Нужна программа translit и 2 нижеуказанных скрипта.
http://rpm.pbone.net/index.php3/stat/4/idpl/423272/com/translit-1.03-1.i386.rpm.html

$ cat tr-walker.sh
----------------------------------------
#!/bin/bash
TPWD=`pwd`
                                                                                                                             
`/usr/local/bin/mp3-translit.pl`;
                                                                                                                             
for f in *; do
    cd "$TPWD/$f";
    TTPWD=`pwd`
    echo "Converting: $TTPWD";
    `/usr/local/bin/mp3-translit.pl`;
    cd "$TPWD";
done

$ cat mp3-translit.pl
--------------------------------------
#!/usr/bin/perl -w
                                                                                                                             
use strict;
 
use File::Copy;
 
my $dirName=$ARGV[0];
$dirName ||='.';
my $file='';
my $cnt=0;
opendir(DIR, "$dirName") or die "Can't opendir $dirName: $!";
while (defined($file=readdir(DIR))) {
    next if $file=~/^\.\.?$/;
    my $trFile=getTRname($file);
    if (-f $file) { `chmod 0644 "$file"` };
    if (-d $file) { `chmod 0755 "$file"` };
    move("$dirName/$file","$dirName/$trFile");
}
 
closedir(DIR);
 
sub getTRname {
    my $input=$_[0];
    my $trFile=`echo "$input" | iconv -f UTF-8 -t KOI8-R  | translit koi8-phg.rus`;
    $trFile=~s/[^a-zA-Z0-9\_\-\.\ ]//gs;
    $trFile=~s/\.+/\./g;
    $trFile=~s/\ /_/g;
    $trFile=~s/\_+/\_/g;
    $trFile=~s/\-+/\-/g;
    return $trFile;
}

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

огромное всем СПАСИБО! с меня бутыль virtual beer! :)

anonymous
()

срезаешь восьмой бит и все... на то он и koi8, не то что всякое говно от микрософт..

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