find, xargs 조합시 공백 문자가 있는 파일

greatkgc의 이미지

cygwin 환경에서입니다.

엄청나게 많은 파일들이 있어 거기에서 특정 패턴을 찾으려고
합니다.

find . -type f -print | xargs egrep pattern

문제는 공백문자가 들어간 화일명이 있는데 그런 경우 제대로
동작하지 않는다는 것입니다. 단순히 공백 문자가 들어간 화일에
대해서만 제대로 동작하지 않으면 상관이 없는데, 이 에러때문에
다른 파일 내용까지 탐색하지 못하는 것으로 보입니다.

물론

find . -type f -exe egrep pattern {} \;

이렇게 하면 제대로 동작은 합니다만.. 첫번째를 어떻게 개선할
수 있는 방법이 없을까요?

sangwoo의 이미지

find . -type f | sed '{
    s/^/\"/
    s/$/\"/
}' | xargs egrep pattern

FreeBSD 6-CURRENT에서만 확인했습니다.

----
Let's shut up and code.

cjh의 이미지

아래와 같이 하면 됩니다. 파일 구분자를 \0 으로 하는 거죠.

Quote:
find . -print0 ... | xargs -0 ...

--
익스펙토 페트로눔

greatkgc의 이미지

잘 동작하는 것 같습니다. ^^ " "로 묶는 아이디어는 생각을 했었는데
sed를 사용할 줄을 몰라서.. :oops:

검색 대상의 파일들이 수천개나 되기 때문에

file . -type f > filelist

이렇게 만들어 놓고

cat filelist | xargs egrep

이렇게 사용했었더랬습니다.

감사합니다.