在目录和子目录中,更改所有文件的编码

・1 分钟阅读

 $ find . -type f -name '*.java' -exec sh -c 'iconv -f cp1252 -t utf-8 "$1" > converted && mv converted "$1"' -- {} ;

说明

find的参数:

  • . --以递归方式搜索当前目录及它子目录
  • -type f --仅匹配文件
  • -name'*.java' --仅匹配以.java结尾的文件名
  • -exec ... ; --执行命令

执行命令有点复杂,因为iconv不重写原始文件,而是在输出中打印已转换的内容,要更新原始文件,需要两个步骤:

  1. 转换并保存到临时文件
  2. 将临时文件移动到原始文件

要执行这些步骤,我们使用sh子shell和-exec,传递一个以便使用-c标志运行,并将文件名作为位置参数传递给-- {} 。

不幸的是,重定向将使用UNIX样式,如果原始文件有DOS样式行结尾,请在子shell中添加此命令:


vim +'set ff=dos' +wq converted

Hujiuxiang profile image