如何确保我的所有源文件都使用Unix行结尾保留UTF-8?

Hub*_*bro 11 unix command-line line-endings character-encoding sublimetext

我正在寻找一些Linux的命令行工具,可以帮助我检测和转换字符集中的文件,如iso-8859-1windows-1252utf-8,从Windows行结尾到Unix行结尾.

我需要这个的原因是我正在通过SFTP在Linux服务器上开展项目,在Windows上使用编辑器(如Sublime Text),这些项目只是不断地搞砸了.现在我猜我的文件大约有一半是utf-8,其余的是iso-8859-1windows-1252,因为看起来Sublime Text只是选择字符集,当我保存它时文件包含哪些符号.尽管我在选项中指定默认行结尾是LF,但行结尾总是Windows行结尾,所以我的文件中有一半有LF,一半是CRLF.

所以我至少需要一个工具来递归扫描我的项目文件夹并提醒我偏离utf-8的文件与LF行结尾,所以我可以在我将更改提交给GIT之前手动修复它.

关于该主题的任何评论和个人经验也将受到欢迎.

谢谢


编辑:我在我使用的地方有一个临时解决方案,treefile输出有关我项目中每个文件的信息,但它有点不可思议.如果我没有包含该-i选项,file那么我的很多文件会得到不同的输出,如 ASCII C++程序文本 HTML文档文本以及英文文本等:

$ tree -f -i -a -I node_modules --noreport -n | xargs file | grep -v directory
./config.json:              ASCII C++ program text
./debugserver.sh:           ASCII text
./.gitignore:               ASCII text, with no line terminators
./lib/config.js:            ASCII text
./lib/database.js:          ASCII text
./lib/get_input.js:         ASCII text
./lib/models/stream.js:     ASCII English text
./lib/serverconfig.js:      ASCII text
./lib/server.js:            ASCII text
./package.json:             ASCII text
./public/index.html:        HTML document text
./src/config.coffee:        ASCII English text
./src/database.coffee:      ASCII English text
./src/get_input.coffee:     ASCII English text, with CRLF line terminators
./src/jtv.coffee:           ASCII English text
./src/models/stream.coffee: ASCII English text
./src/server.coffee:        ASCII text
./src/serverconfig.coffee:  ASCII text
./testserver.sh:            ASCII text
./vendor/minify.json.js:    ASCII C++ program text, with CRLF line terminators

但如果我确实包含-i它,则不会显示行终止符:

$ tree -f -i -a -I node_modules --noreport -n | xargs file -i | grep -v directory
./config.json:              text/x-c++; charset=us-ascii
./debugserver.sh:           text/plain; charset=us-ascii
./.gitignore:               text/plain; charset=us-ascii
./lib/config.js:            text/plain; charset=us-ascii
./lib/database.js:          text/plain; charset=us-ascii
./lib/get_input.js:         text/plain; charset=us-ascii
./lib/models/stream.js:     text/plain; charset=us-ascii
./lib/serverconfig.js:      text/plain; charset=us-ascii
./lib/server.js:            text/plain; charset=us-ascii
./package.json:             text/plain; charset=us-ascii
./public/index.html:        text/html; charset=us-ascii
./src/config.coffee:        text/plain; charset=us-ascii
./src/database.coffee:      text/plain; charset=us-ascii
./src/get_input.coffee:     text/plain; charset=us-ascii
./src/jtv.coffee:           text/plain; charset=us-ascii
./src/models/stream.coffee: text/plain; charset=us-ascii
./src/server.coffee:        text/plain; charset=us-ascii
./src/serverconfig.coffee:  text/plain; charset=us-ascii
./testserver.sh:            text/plain; charset=us-ascii
./vendor/minify.json.js:    text/x-c++; charset=us-ascii

另外为什么它显示charset = us-ascii而不是utf-8?什么是text/x-c ++?有没有办法只输出charset=utf-8line-terminators=LF每个文件?

Hub*_*bro 12

我最终得到的解决方案是两个Sublime Text 2插件"EncodingHelper""LineEndings".我现在在状态栏中获取文件编码和行结尾:

Sublime Text 2状态栏

如果编码错误,我可以使用File-> Save with Encoding.如果行结尾错误,后一个插件会带有更改行结尾的命令:

Sublime Text 2命令