grep: --exclude-dir이 작동하지 않습니다

grep: --exclude-dir이 작동하지 않습니다

grep데비안 /proc에서는 또는 /sys. 하지만 다음을 사용하면:

 --exclude-dir=/proc

또는

--exclude-dir={/proc,/sys}

또는

--exclude-dir=/proc --exclude-dir=/sys

그런 다음 grep여전히 읽고 /sys따라서 충돌합니다. 그러면 grep건너뛰기 /proc와 디렉토리를 어떻게 알 수 있나요 /sys?

답변1

--exclude-dirGNU 매뉴얼의 문서 grep에 따르면

--exclude-dir=GLOB

이름 접미사가 패턴과 일치하는 모든 명령줄 디렉터리는 건너뜁니다 GLOB. 재귀적으로 검색할 때 기본 이름과 일치하는 하위 디렉터리를 건너뜁니다 GLOB. 추가 후행 슬래시는 무시됩니다 GLOB.

보시다시피, 주어진 패턴( GLOB)은 디렉토리의 실제 파일명에만 적용되며, 디렉토리 이름은 /이름에 포함될 수 없으므로 유사한 패턴은 /proc절대 일치하지 않습니다.

--exclude-dir=proc따라서 and --exclude-dir=sys(또는 --exclude-dir={proc,sys}시간이 부족한 경우)를 사용해야 합니다 . 또한 이 방법은 /procand를 건너뛸 /sys뿐만 아니라다른다음 이름 중 하나를 가진 디렉터리입니다.

이 두 디렉토리를 피하면서 루트부터 아래쪽으로 전체 디렉토리 트리를 재귀적으로 검색하는 또 다른 방법은 grepfrom 을 사용하는 것입니다 find.

find / \( -type d \( -path /proc -o -path /sys \) -prune \) -o \
    -type f -exec grep 'PATTERN' {} +

이렇게 하면 두 가지가 감지됩니다.특정한디렉토리를 /proc선택하고 입력을 /sys중지하세요 . find또한 grep한 번에 가능한 한 큰 배치로 찾은 일반 파일을 제공합니다.

답변2

그래도 이것은 훌륭하게 작동합니다!

 --exclude-dir={proc,sys} 

답변3

grep은 검색 목록에서 dev/, sys/ 등으로 표시되므로 선택한 디렉토리를 검색 시 파일 이름의 기초로 사용하므로 다음을 사용하지 마십시오.

grep 'yourstring' -R --exclude-dir={/dev,/sys,/proc} / 

다음을 사용해야 합니다.

grep 'yourstring '-R --exclude-dir={dev/,sys/,proc/} /

관련 정보