estoy en busca de algunas herramientas de línea de comandos para Linux que me puedan ayudar a detectar y convertir archivos de juegos de caracteres como iso-8859-1 y windows-1252 a UTF-8 y desde finales de línea de Windows a terminaciones de línea Unix.¿Cómo me aseguro de que todos mis archivos fuente permanezcan UTF-8 con terminaciones de línea Unix?
La razón por la que necesito esto es porque estoy trabajando en proyectos en servidores Linux a través de SFTP con editores en Windows (como Sublime Text) que constantemente arruina todo esto. En este momento estoy adivinando cerca de la mitad de mis archivos son UTF-8, el resto son iso-8859-1 y windows-1252 como parece Sublime Text se acaba de recoger el conjunto de caracteres por los que el archivo contiene símbolos cuando Lo guardo. Las terminaciones de línea son SIEMPRE terminaciones de línea de Windows aunque he especificado en las opciones que las terminaciones de línea predeterminadas son LF, entonces aproximadamente la mitad de mis archivos tienen LF y la otra mitad son CRLF.
Así que necesitaría al menos una herramienta que forma recursiva escanear mi carpeta del proyecto y me avise de los archivos que se desvían de UTF-8 con LF finales de línea para que pudiera fijar manualmente que antes de comprometerme mis cambios GIT.
Todos los comentarios y experiencias personales sobre el tema también serían bienvenidos.
Gracias
Editar: yo tenemos una solución temporal en el lugar donde uso tree
y file
a la información de salida acerca de cada archivo en mi proyecto, pero es un poco torcidas. Si no incluyo la opción -i
para file
entonces un montón de mis archivos se pone de salida diferente como ASCII C++ texto del programa y documento HTML texto y Inglés texto etc:
$ 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
Pero si no incluir -i
que no me muestra las terminaciones de línea:
$ 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
también por qué se muestra charset = us-ascii y no utf-8? ¿Y qué es text/x-C++? ¿Hay alguna forma de que solo produzca charset=utf-8
y line-terminators=LF
para cada archivo?
En cuanto a una solución, tal vez usted podría incluir un comentario con un código de carácter decididamente no-ASCII (el símbolo de copyright viene a la mente) y guardar como UTF-8 - tal vez esto sea suficiente para que Sublime Text deje de adivinar tantas cosas. – tripleee
¡Tampoco puedo, por mi vida, obtener Sublime Text para usar saltos de línea Unix para el amor de Dios! "default_line_ending": "unix" debería funcionar! – jlarson