【发布时间】:2021-06-08 23:27:00
【问题描述】:
我有一堆文件是用 GB2312 编码的,现在我想将它们转换成 UTF-8,所以我应用下面的代码:
find . | xargs iconv -f GB2312 -t UTF-8
它成功转换它们,但输出打印在控制台中。
这里我希望它们保存在原始文件中,我该怎么做?
【问题讨论】:
我有一堆文件是用 GB2312 编码的,现在我想将它们转换成 UTF-8,所以我应用下面的代码:
find . | xargs iconv -f GB2312 -t UTF-8
它成功转换它们,但输出打印在控制台中。
这里我希望它们保存在原始文件中,我该怎么做?
【问题讨论】:
您总是可以使用循环而不是xargs。我不建议在一次性命令行调用中覆盖文件。先把它们移到一边怎么样:
for file in `find .`; do
mv "$file" "file.old" && iconv -f GB2312 -t UTF-8 < "$file.old" > "$file"
done
请注意这一点。如果您的文件名包含空格,则此循环可能无法正常工作。
【讨论】:
for ...; do mv .... > "$file"; done
for file in `find .`; do mv "$file" "$file.old" && iconv -f GB2312 -t UTF-8 < "$file.old" > "$file" done 这可悲地杀死了我的一个代码仓库。