디버깅을 위해 UTF-8 BOM (byte order mark)으로 시작하는 모든 파일에 대한 디렉토리를 재귀 적으로 검색해야합니다. 내 현재 솔루션은 간단한 쉘 스크립트입니다.
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
줄 바꿈이 포함 된 파일 이름에서는 작동하지 않지만 이러한 파일은 어쨌든 예상되지 않습니다.
더 짧거나 더 우아한 솔루션이 있습니까?
텍스트 편집기를위한 흥미로운 텍스트 편집기 나 매크로가 있습니까?
답변
불쾌한 BOM을 찾을뿐만 아니라 지우는이 간단한 명령은 어떻습니까? 🙂
find . -type f -exec sed '1s/^\xEF\xBB\xBF//' -i {} \;
나는 “찾기”를 좋아한다 🙂
경고 위의 내용은 이러한 세 문자를 포함하는 바이너리 파일을 수정 합니다.
BOM 파일 만 표시하려면 다음을 사용하십시오.
grep -rl $'\xEF\xBB\xBF' .
답변
Windows에서이 작업을 수행하는 가장 쉽고 쉬운 방법 :
Total Commander → 프로젝트의 루트 디렉토리로 이동 → 파일 찾기 ( Alt+ F7) → 파일 형식 *. * → 텍스트 “EF BB BF”찾기 → ‘Hex’체크 박스 확인 → 검색
그리고 당신은 목록을 얻습니다 🙂
답변
find . -type f -print0 | xargs -0r awk '
/^\xEF\xBB\xBF/ {print FILENAME}
{nextfile}'
위에 제공된 대부분의 솔루션은 일부 (예 : Marcus의 솔루션)가 결과를 필터링하더라도 파일의 첫 번째 줄보다 더 많이 테스트합니다. 이 솔루션은 각 파일의 첫 번째 줄만 테스트하므로 조금 더 빠릅니다.
답변
오 탐지 (텍스트가 아닌 파일이있는 경우 또는 파일 중간에 ZWNBSP가있는 경우)를 허용하는 경우 grep을 사용할 수 있습니다.
fgrep -rl `echo -ne '\xef\xbb\xbf'` .
답변
다음과 같이 사용합니다.
grep -orHbm1 "^`echo -ne '\xef\xbb\xbf'`" . | sed '/:0:/!d;s/:0:.*//'
그러면 BOM이 파일의 첫 번째 바이트에서 시작됩니다.