Элегантный способ поиска файлов UTF-8 с помощью спецификации? - PullRequest
84 голосов
/ 15 октября 2008

В целях отладки мне нужно рекурсивно искать в каталоге все файлы, которые начинаются с метки порядка байтов UTF-8 (BOM). Мое текущее решение - простой сценарий оболочки:

find -type f |
while read file
do
    if [ "`head -c 3 -- "$file"`" == $'\xef\xbb\xbf' ]
    then
        echo "found BOM in: $file"
    fi
done

Или, если вы предпочитаете короткие, нечитаемые однострочные:

find -type f|while read file;do [ "`head -c3 -- "$file"`" == $'\xef\xbb\xbf' ] && echo "found BOM in: $file";done

Не работает с именами файлов, которые содержат разрыв строки, но таких файлов в любом случае ожидать не стоит.

Есть ли более короткое или элегантное решение?

Существуют ли какие-либо интересные текстовые редакторы или макросы для текстовых редакторов?

Ответы [ 11 ]

0 голосов
/ 16 октября 2014

Если вы ищете файлы UTF, команда file работает. Он скажет вам, какова кодировка файла. Если там есть какие-либо символы, не входящие в ASCII, то появится UTF.

file *.php | grep UTF

Это не будет работать рекурсивно, хотя. Вероятно, вы можете настроить некоторую причудливую команду, чтобы она стала рекурсивной, но я просто искал каждый уровень в отдельности, как показано ниже, пока не исчерпал уровни.

file */*.php | grep UTF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...