вторник, 31 января 2012 г.

массовое изменение кодировки файлов.

Натолкнулся на простенький но полезный скрипт, который позволяет рекурсивно поменять кодировки по всех файлах на заданную, начиная с указанного каталога
Скрипт написан на perl с использованием sh



Параметры запуска

/путь/к/скрипту /путь/папке/для/перекодирования кодировка

Сам скрипт:

#!/usr/bin/perl
 
# Получаем аргументы
my $dir = $ARGV[0];
my $code = $ARGV[1];
 
if (length($code) < 2) {
    print "Введите кодировку после директории! Например:\nchange_coder.pl /etc/ utf-8\n";
    exit;
}
 
# Получаем список файлов
my @files = `find $dir`;
 
# Удаляем лишние переходы на нову строку
chomp @files;
 
# интуитивно понятно...
my $count = @files;
my $a = 0;
while ($a < $count){
    # Парсим
   # Удаляем лишнее из строки
 
    $b = `file -i $files[$a] | awk '{ gsub(".+(charset=|binary)",""); print }'`;
    chomp $b;
 
    # удаляем, из строки нашу кодировку если наша кодировка
   $b =~ s/$code//;
 
    # если наша кодировкане найдена в строке
   if (length($b) > 1){
# перекодируем в темп
print "iconv -f $b -t $code $files[$a] -o /tmp/chk.tmp\n";
`iconv -f $b -t $code $files[$a] -o /tmp/chk.tmp`;
 
# переносим файл обратно с заменой ну и удаляем BOM если он там есть
print "mv /tmp/chk.tmp $files[$a]\n\n && sed -i '1 s/^\xef\xbb\xbf//' $files[$a]";
`mv /tmp/chk.tmp $files[$a] && sed -i '1 s/^\xef\xbb\xbf//' $files[$a]`;
}
$a++;
}
Скрипт не мой, был взят из  Массовая перекодировка под правильные ОС

1 комментарий: