Натолкнулся на простенький но полезный скрипт, который позволяет рекурсивно поменять кодировки по всех файлах на заданную, начиная с указанного каталога
Скрипт написан на perl с использованием sh
Параметры запуска
Сам скрипт:
Скрипт написан на 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++;
}
Скрипт не мой, был взят из Массовая перекодировка под правильные ОС
О смене кодировки в Linux
ОтветитьУдалитьhttp://yournet.kz/view/590