О выпиливании BOM из utf-8 файлов

March 22, 2009 by Andrew Tch · 2 Comments 

После буйства Алекса, поставившего какой-то суровый русский плагин, пришлось немного починить atdodu.lv. Суть была в том что в RSS почему-то вылезала BOM UTF-8 mark, но не было понятно, из какого файла это дрянь бралась.

После 15 минут было наваяно решение на баше для нахождения файлов с utf-8 bom отметинами.

for file in `find .`; do cat $file 2>/dev/null | hexdump | grep 0000000\ bbef > /dev/null; if [ $? -eq 0 ]; then echo $file; fi; done

Немного комментариев. Начало, думаю, понятно всем – ищем все файлы в текущей папке. Далее, выполняем составную команду:

cat $file 2>/dev/null | hexdump | grep 0000000\ bbef > /dev/null

2>/dev/null нужен чтобы cat не вопила об ошибках что xxx is a directory. bbef – как раз и есть тот BOM file mark. Вывод grep нам не нужен, пихаем его в /dev/null – нам нужен только результат работы grep, 0 если что-то найдено или единица – если нет.

Полученный результат выполнения последней команды ($?) проверяем на равенство нулю и в случае равенства печатаем название файла:

if [ $? -eq 0 ]; then echo $file; fi;

Короче – выпилите notepad, пожалуйста.

——————-
У кого bash, a у кого – создание сайтов.