更改文件夹及其子文件夹中每个 .txt 文件的编码

更改文件夹及其子文件夹中每个 .txt 文件的编码

我有一个文件夹,其中包含许多 txt 文件和子文件夹,其中也包含许多 txt 文件。

我想自动更改所有文件的编码。现在我知道如何使用以下命令更改一个文件:

iconv -f gbk -t utf8 sample.txt > sample.wiki

我需要文件的名称不变,并将其扩展名更改为 .wiki。如何自动实现此操作?

答案1

您可以迭代文件,更改编码,使用选项.txt将输出保存在.wiki同名文件中,如果成功则删除相关文件:-oiconv.txt

shopt -s globstar  ## Enables recursive glob matching
for f in **/*.txt; do
    iconv -f gbk -t utf8 -o "${f%.txt}".wiki "$f" && rm "$f"
done

警告:

如果输入文件不是给定的源编码或已经是目标编码,iconv则将返回 true 而不执行任何操作,因此.wiki不会创建该文件并且该.txt文件将被删除。

为了解决这个问题,您可以在转换后将 STDOUT 保存在变量中,如果变量不为空,则将输出保存在文件中.wiki并删除该txt文件:

shopt -s globstar  ## Enables recursive glob matching
for f in **/*.txt; do
    out="$(iconv -f gbk -t utf8 "$f")" 
    [[ -n $out ]] && echo "$out" >"${f%.txt}".wiki && rm "$f"
done

相关内容