grep을 사용하여 중첩된 디렉터리 제외

grep을 사용하여 중첩된 디렉터리 제외

grep 검색에서 중첩된 디렉터리를 제외하고 싶습니다 /path/to/file. 예:

jake@jake-laptop:~/test$ egrep -r --exclude-dir="path" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="to" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="file" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="path/to/file" "hello" .
./path/to/file/f.txt:hello

마지막 줄에서는 해당 파일이 제외되지 않습니다. 이는 매개 변수와 함께 제공된 중첩된 디렉터리가 여러 개 있기 때문인 것 같습니다 exclude-dir. path/to/file디렉토리 검색을 제외하는 마지막 예를 어떻게 얻을 수 있습니까 ?

답변1

--exclude-dir경로의 기본 이름(즉, 현재 하위 디렉터리)과만 비교하는 것 같습니다 . 따라서 path/to/file은 dir "file"과 절대 일치하지 않고, --exclude-dir=fileglob 버전(예: --exclude-dir=*ile.

일반적인 대안은 find예를 들어 옵션을 처리하는 경우 를 사용하는 것입니다 -path.

find . -path ./path/to/file -prune -o -type f -exec egrep -l 'hello' {} +

그 뒤의 패턴은 -path시작 디렉터리를 포함한 경로와 일치해야 하지만 glob을 사용하여 이를 단순화할 수 있습니다. 예를 들어 '*path*file*'*도 /와 일치합니다.

그렇지 않으면 로 전환할 수 있습니다 find | sed | xargs egrep.

관련 정보