Как пакетно конвертировать старые файлы в UTF8?

Я думаю, что идеальным решением для меня является скрипт Nautilus, который выполняет преобразование кодировки для выбранных файлов.

Следующий скрипт читает кодировку выбранного файла и выполняет преобразование utf8, если это не utf8, но я не мог понять, как заставить его работать с несколькими файлами:

CHARSET="$(file -bi "$1"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$1" -c -o "$1.utf8"
fi

2 ответа

Решение

Допустим, ваш сценарий называется convert-to-utf-8.sh, Вот как вы можете заставить его работать с несколькими файлами:

for filename in file1 file2 file3 ; do ./convert-to-utf-8.sh "$filename" ; done

Вы можете включить этот цикл for в сам скрипт, например так:

for filename in "$@"; do
    CHARSET="$(file -bi "$filename"|awk -F "=" '{print $2}')"
    if [ "$CHARSET" != utf-8 ]; then
        iconv -f "$CHARSET" -t utf8 "$filename" -c -o "$filename.utf8"
    fi
done

Затем вы можете запустить скрипт с несколькими именами файлов:

./convert-to-utf-8.sh file1 file2 file3

Вот хороший и простой скрипт Nautilus, который мне удалось написать благодаря Flimm как видно из ответа выше:

#!/bin/sh
#Nautilus Script to determine encoding of selected file(s) and convert to utf8 if necessary
#
for filename in $@; do
    CHARSET="$(file -bi "$filename"|awk -F "=" '{print $2}')"
    if [ "$CHARSET" != utf-8 ]; then
        iconv -f "$CHARSET" -t utf8 "$filename" -c -o "$filename.utf8" &&
        mv -f "$filename.utf8" "$filename"
    fi
done
Другие вопросы по тегам