在目录和子目录中,更改所有文件的编码
Hujiuxiang
・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
不重写原始文件,而是在输出中打印已转换的内容,要更新原始文件,需要两个步骤:
- 转换并保存到临时文件
- 将临时文件移动到原始文件
要执行这些步骤,我们使用sh子shell和-exec,传递一个以便使用-c标志运行,并将文件名作为位置参数传递给-- {} 。
不幸的是,重定向将使用UNIX样式,如果原始文件有DOS样式行结尾,请在子shell中添加此命令:
vim +'set ff=dos' +wq converted