【问题标题】:Batch converting file encoding批量转换文件编码
【发布时间】:2021-06-08 23:27:00
【问题描述】:

我有一堆文件是用 GB2312 编码的,现在我想将它们转换成 UTF-8,所以我应用下面的代码:

find . | xargs iconv -f GB2312 -t UTF-8

它成功转换它们,但输出打印在控制台中。

这里我希望它们保存在原始文件中,我该怎么做?

【问题讨论】:

    标签: shell xargs


    【解决方案1】:

    您总是可以使用循环而不是xargs。我不建议在一次性命令行调用中覆盖文件。先把它们移到一边怎么样:

    for file in `find .`; do
        mv "$file" "file.old" && iconv -f GB2312 -t UTF-8 < "$file.old" > "$file"
    done
    

    请注意这一点。如果您的文件名包含空格,则此循环可能无法正常工作。

    【讨论】:

    • 你的代码就像一个魅力,谢谢!只是为了好奇,是否有任何一行命令可以做到这一点?
    • 在循环体后面加分号就可以全部放在一行ie for ...; do mv .... &gt; "$file"; done
    • 顺便说一下,如果您的文件名中有空格,请阅读:stackoverflow.com/questions/7039130/…
    • 谢谢@paddy,真的很有帮助。
    • 之前应该有一个 $...for file in `find .`; do mv "$file" "$file.old" &amp;&amp; iconv -f GB2312 -t UTF-8 &lt; "$file.old" &gt; "$file" done 这可悲地杀死了我的一个代码仓库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2019-08-02
    • 2013-04-15
    • 1970-01-01
    • 2019-01-04
    • 2011-10-05
    相关资源
    最近更新 更多