仅将非 utf-8 文件转换为 utf-8

Converting only non utf-8 files to utf-8

我有一组 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 文件的正确字符集,但在这种情况下它可以区分 utf-8 和非 utf 就足够了-8 个文件。

在此先感谢您的帮助。

您可以使用例如 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 没有找到匹配项,它 returns 一个指示失败的状态代码。 if语句测试状态码