Как убедиться, что все мои исходные файлы остаются в кодировке UTF-8 с окончанием строки Unix?

Я ищу некоторые инструменты командной строки для Linux, которые могут помочь мне обнаруживать и преобразовывать файлы из наборов символов, таких как iso-8859-1 и windows-1252 до utf-8 и от окончаний строк Windows до окончаний строк Unix.

Причина, по которой мне это нужно, заключается в том, что я работаю над проектами на серверах Linux через SFTP с редакторами в Windows (например, Sublime Text), которые просто постоянно портят эти вещи. Прямо сейчас я предполагаю, что примерно половина моих файлов - это utf-8 , остальные - iso-8859-1 и windows-1252 , как кажется Sublime Text просто выбирает набор символов, которые содержит файл, когда я его сохраняю. Концы строк ВСЕГДА являются окончаниями строк Windows, хотя я указал в параметрах, что окончание строк по умолчанию - LF , поэтому примерно половина моих файлов имеет LF , а половина - CRLF .

Мне понадобится хотя бы инструмент, который рекурсивно просканирует папку моего проекта и предупредит меня о файлах, которые отличаются от utf-8 с окончанием строки LF , чтобы я мог вручную исправить это до того, как я зафиксирую свои изменения в GIT.

Также приветствуются любые комментарии и личный опыт по теме.

Спасибо


Изменить: У меня есть временное решение, в котором я использую tree и file для вывода информации о каждом файле в моем проекте, но это вроде как шаткий. Если я не включу параметр -i для файла , то многие мои файлы получат другой вывод, например текст программы 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-8 и line-terminators = LF для каждого файла?

11
задан Good Person 9 November 2012 в 01:24
поделиться