BOM으로 UTF-8 파일을 검색하는 우아한 방법?
디버깅을 위해 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이 파일의 첫 번째 바이트에서 시작됩니다.
grep
이를 사용 하여 찾을 수 있으며 Perl을 사용 하여 다음과 같이 제거 할 수 있습니다.
grep -rl $'\xEF\xBB\xBF' . | xargs perl -i -pe 's{\xEF\xBB\xBF}{}'
Windows 사용자의 경우이 항목을 참조 하십시오 ( BOM
프로젝트에서 찾기에 좋은 PHP 스크립트 ).
이에 대한 과잉 해결책은 phptags
( vi
동일한 이름 의 도구가 아님 ) 특히 PHP 스크립트를 찾습니다.
phptags --warn ./
다음과 같이 출력됩니다.
./invalid.php: TRAILING whitespace ("?>\n")
./invalid.php: UTF-8 BOM alone ("\xEF\xBB\xBF")
그리고 --whitespace
모드는 이러한 문제를 자동으로 수정합니다 (재귀 적으로하지만 .php 스크립트 만 다시 작성한다고 주장합니다).
find -type f -print0 | xargs -0 grep -l `printf '^\xef\xbb\xbf'` | sed 's/^/found BOM in: /'
find -print0
새 줄을 사용하는 대신 각 파일 이름 사이에 null \ 0을 넣습니다.xargs -0
줄로 구분 된 대신 널로 구분 된 인수가 필요합니다.grep -l
정규식과 일치하는 파일을 나열합니다.^\xeff\xbb\xbf
줄의 시작 부분에 너비가 0 인 경우 BOM이 아닌 UTF-8 파일과 일치하므로 정규식 은 완전히 정확하지 않습니다.
JavaScript 파일 만 수정하는 데 사용했습니다.
find . -iname *.js -type f -exec sed 's/^\xEF\xBB\xBF//' -i.bak {} \; -exec rm {}.bak \;
If you are looking for UTF files, the file command works. It will tell you what the encoding of the file is. If there are any non ASCII characters in there it will come up with UTF.
file *.php | grep UTF
That won't work recursively though. You can probably rig up some fancy command to make it recursive, but I just searched each level individually like the following, until I ran out of levels.
file */*.php | grep UTF
참고URL : https://stackoverflow.com/questions/204765/elegant-way-to-search-for-utf-8-files-with-bom
'IT story' 카테고리의 다른 글
ASP.NET Web Api : 요청 된 리소스가 http 메서드 'GET'을 지원하지 않습니다. (0) | 2020.09.08 |
---|---|
Django 클래스 기반보기 : as_view 메소드에 추가 매개 변수를 어떻게 전달합니까? (0) | 2020.09.08 |
Sublime 2 업데이트 알림을 끄는 방법은 무엇입니까? (0) | 2020.09.08 |
CG_CONTEXT_SHOW_BACKTRACE 환경 변수를 어떻게 설정할 수 있습니까? (0) | 2020.09.08 |
각도 2의 버튼을 사용하여 다른 페이지로 이동 (0) | 2020.09.08 |