我正在寻找一些适用于 Linux 的命令行工具,它们可以帮助我检测并将文件从iso-8859-1和windows-1252等字符集转换为utf-8以及从 Windows 行尾转换为 Unix 行尾。
我需要这个的原因是我正在通过 SFTP 使用 Windows 上的编辑器(如 Sublime Text)在 Linux 服务器上处理项目,这些编辑器不断地搞砸这些事情。现在我猜我的文件大约有一半是utf-8,其余的是iso-8859-1和windows-1252因为看起来 Sublime Text 只是在我保存文件时选择文件包含的字符集。即使我在选项中指定默认行结尾是LF,行结尾总是 Windows 行结尾,所以我的文件中大约有一半有LF,一半是CRLF。
所以我至少需要一个工具来递归地扫描我的项目文件夹并提醒我有LF行结尾偏离utf-8的文件,这样我就可以在将更改提交到 GIT 之前手动修复它。
任何关于该主题的评论和个人经验也将受到欢迎。
谢谢
编辑:我有一个临时解决方案,我使用tree
并file
输出有关我项目中每个文件的信息,但这有点不稳定。如果我不包括该-i
选项,file
那么我的很多文件都会得到不同的输出,例如ASCII C++ 程序文本和HTML 文档文本和英文文本等:
$ tree -f -i -a -I node_modules --noreport -n | xargs 文件 | grep -v 目录 ./config.json:ASCII C++ 程序文本 ./debugserver.sh:ASCII 文本 ./.gitignore:ASCII 文本,没有行终止符 ./lib/config.js:ASCII 文本 ./lib/database.js:ASCII 文本 ./lib/get_input.js:ASCII 文本 ./lib/models/stream.js:ASCII 英文文本 ./lib/serverconfig.js:ASCII 文本 ./lib/server.js:ASCII 文本 ./package.json:ASCII 文本 ./public/index.html:HTML 文档文本 ./src/config.coffee:ASCII 英文文本 ./src/database.coffee:ASCII 英文文本 ./src/get_input.coffee:ASCII 英文文本,带有 CRLF 行终止符 ./src/jtv.coffee:ASCII 英文文本 ./src/models/stream.coffee:ASCII 英文文本 ./src/server.coffee:ASCII 文本 ./src/serverconfig.coffee:ASCII 文本 ./testserver.sh:ASCII 文本 ./vendor/minify.json.js:ASCII C++ 程序文本,带有 CRLF 行终止符
但是,如果我确实包含-i
它,它不会向我显示行终止符:
$ tree -f -i -a -I node_modules --noreport -n | xargs 文件 -i | grep -v 目录 ./config.json: 文本/x-c++; charset=us-ascii ./debugserver.sh:文本/纯文本;charset=us-ascii ./.gitignore:文本/纯文本;charset=us-ascii ./lib/config.js:文本/纯文本;charset=us-ascii ./lib/database.js:文本/纯文本;charset=us-ascii ./lib/get_input.js:文本/纯文本;charset=us-ascii ./lib/models/stream.js:文本/纯文本;charset=us-ascii ./lib/serverconfig.js:文本/纯文本;charset=us-ascii ./lib/server.js:文本/纯文本;charset=us-ascii ./package.json:文本/纯文本;charset=us-ascii ./public/index.html:文本/html;charset=us-ascii ./src/config.coffee:文本/纯文本;charset=us-ascii ./src/database.coffee:文本/纯文本;charset=us-ascii ./src/get_input.coffee:文本/纯文本;charset=us-ascii ./src/jtv.coffee:文本/纯文本;charset=us-ascii ./src/models/stream.coffee:文本/纯文本;charset=us-ascii ./src/server.coffee:文本/纯文本;charset=us-ascii ./src/serverconfig.coffee:文本/纯文本;charset=us-ascii ./testserver.sh:文本/纯文本;charset=us-ascii ./vendor/minify.json.js: text/x-c++; charset=us-ascii
另外为什么它显示charset=us-ascii而不是utf-8?什么是text/x-c++?有没有一种方法可以只输出charset=utf-8
每个line-terminators=LF
文件?