ack
아니면 이것을 사용 하거나 find
달성 해야 합니까 ?
이것이 내가 원하는거야. 다음과 같은 디렉터리 구조가 있다고 가정해 보겠습니다.
dir/nesteddir/match.txt
otherdir/nesteddir/match.txt
첫 번째 중첩 디렉터리만 제외하는 방법은 무엇입니까? grep을 사용하는 것도 가능합니까? 가장 확실한 대답은 $ grep -r --exclude-dir="dir/nesteddir" "stringToFind" .
작동하지 않는 것 같으며 --exclude-dir
globbing, Leading 등을 사용하는 ./
다양한 경로에 대한 내 실험도 수행되지 않습니다.
매뉴얼 페이지를 읽고 인터넷 검색을 해도 도움이 되지 않았습니다. 제가 찾은 이 사용 사례에 대한 유일한 언급은 다음 질문이었습니다.grep --exclude-dir 동작: 버그 또는 기능?
결론은 grep 2.12에서 소개된 버그라는 것인데, 저는 최신 버전(2.16)과 grep의 버그 트래커(https://debbugs.gnu.org/cgi/pkgreport.cgi?package=grep)에는 그와 관련된 내용이 전혀 언급되어 있지 않으므로 --exclude-dir
수정되었거나 예상되는 동작인 것으로 추측됩니다.
약간의 설명을 얻는 것이 정말 좋을 것입니다.
답변1
인수는 --exclude-dir
디렉터리의 기본 이름(즉, 상위 상위 디렉터리가 없는 부분)과 일치하는 패턴입니다. 예를 들어 및 (및 해당 하위 디렉터리)를 --exclude-dir=nesteddir
제외합니다 .dir/nesteddir
otherdir/nesteddir
GNU grep만 사용하여 동일한 이름을 가진 다른 디렉터리를 제외하지 않고 하나의 디렉터리를 제외할 수 있는 방법은 없습니다. 파일을 선택하려면 GNU find와 같은 보다 정교한 방법을 사용해야 합니다.
find dir -path dir/nesteddir -prune -o -type f -exec grep -H 'pattern' {} +