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=file
glob 버전(예: --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
.