我有一个文件夹,其中包含许多 txt 文件和子文件夹,其中也包含许多 txt 文件。
我想自动更改所有文件的编码。现在我知道如何使用以下命令更改一个文件:
iconv -f gbk -t utf8 sample.txt > sample.wiki
我需要文件的名称不变,并将其扩展名更改为 .wiki。如何自动实现此操作?
答案1
您可以迭代文件,更改编码,使用选项.txt
将输出保存在.wiki
同名文件中,如果成功则删除相关文件:-o
iconv
.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