![如何将目录中的 .xml 文件批量转换为 UTF-8,同时保留相同的文件名](https://linux22.com/image/1422619/%E5%A6%82%E4%BD%95%E5%B0%86%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%20.xml%20%E6%96%87%E4%BB%B6%E6%89%B9%E9%87%8F%E8%BD%AC%E6%8D%A2%E4%B8%BA%20UTF-8%EF%BC%8C%E5%90%8C%E6%97%B6%E4%BF%9D%E7%95%99%E7%9B%B8%E5%90%8C%E7%9A%84%E6%96%87%E4%BB%B6%E5%90%8D.png)
我有许多以 ISO-8859-1 编码的 .xml 文件,并且我希望它们全部以 UTF-8 编码。
我找到了单独转换它们的代码:
iconv -f ISO-8859-1 -t UTF-8 filename.xml > newfilename.xml
并且运行良好。
我想知道如何编写一个 shell 脚本来自动清理目录中的所有 .xml 文件,然后用新的转换文件替换旧文件,但仍保留相同的文件名。
我是 Shell 脚本的新手,因此非常感激您的帮助。
答案1
您可以在 bash shell 的命令行中执行此操作
for i in *.xml; do
iconv -f ISO-8859-1 -t UTF-8 "$i" > "$i.1" && mv "$i.1" "$i"
done
这基本上获取所有 xml 文件,将它们通过 Iconv 转换为 filname.xml.1,然后将该文件移回原始文件名
快速浏览了一下 iconv,我认为它应该是这样的(如果你使用的是 GNU 版本)
for i in *.xml; do
iconv -sc -f ISO-8859-1 -t UTF-8 "$i" > "$i.1" && mv "$i.1" "$i"
done
-s 选项可消除警告,-c 选项可从输出中省略无效字符。