Как пакетно конвертировать старые файлы в 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