Преобразование только файлов не в формате utf-8 в utf-8 - PullRequest
1 голос
/ 12 апреля 2020

У меня есть набор md файлов, некоторые из них имеют кодировку utf-8, а другие нет (на самом деле * windows-1256).

Я хочу конвертировать только файлы не-utf-8 в utf-8.

Следующий скрипт может частично выполнить работу:

for file in *.md;
do
    iconv -f windows-1256 -t utf-8 "$file" -o "${file%.md}.?.md";
done

Мне все еще нужно исключить исходные файлы utf-8 из этого процесса, (может быть, с помощью команды file?). Чтобы понять, что я имею в виду, попробуйте следующую команду:

file --mime-encoding *

Обратите внимание, что хотя команда file недостаточно умна, чтобы определить правильный набор символов для файлов не-utf-8, этого достаточно в этом случае что он может различать guish между файлами utf-8 и non-utf-8.

Заранее спасибо за помощь.

1 Ответ

1 голос
/ 13 апреля 2020

Вы можете использовать, например, оператор if:

if file --mime-encoding "$file" | grep -v -q utf-8 ; then
    iconv -f windows-1256 -t utf-8 "$file" -o "${file%.md}.?.md";
fi

Если grep не находит совпадения, он возвращает код состояния, указывающий на ошибку. Оператор if проверяет код состояния

...