여러 디렉터리를 제외하려면 --exclude-dir 플래그와 함께 grep을 사용하세요.

여러 디렉터리를 제외하려면 --exclude-dir 플래그와 함께 grep을 사용하세요.

저는 OSX에서 사용되는 단어를 Ruby on Rails 애플리케이션에서 검색하고 grep있으며 특정 패턴과 일치하는 디렉토리를 제외하고 싶습니다.

다음 명령을 사용하고 있습니다.

grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'

명령이 내가 상상했던 대로 실행되지 않습니다. 나는 이렇다아이디어작동합니다:

  • - 대소문자를 구분하지 않는 검색
  • N- 패턴이 발견된 줄 번호를 인쇄하세요.
  • 오른쪽- 재귀 검색
  • - 전체 단어를 원합니다. 즉, "direct"는 일치하지만 "directory"는 일치하지 않습니다.
  • -이자형- 확장 정규식을 사용하세요.
  • '직접'- 내가 매칭하고 싶은 정규식
  • .- 현재 디렉토리에서 검색
  • --exclude-dir -E 'git|log|자산'- git, log 또는 자산과 일치하는 디렉터리를 제외합니다.

디렉토리 제외에 관한 한 명령은 여전히 ​​​​다음으로 끝납니다.'./git'그리고'. /통나무'디렉토리 뿐만 아니라'./응용 프로그램/자산'

나는 분명히 기본적인 지식이 하나 부족하지만 그것이 무엇인지 모릅니다.

답변1

그 패턴은 다음과 같다구체이런 패턴은 아니지정규식. ~에 따르면info페이지:

--제외-디렉터리=GLOB

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

그래서,스위치를 여러 번 사용하거나또는 쉘이 중괄호 확장을 지원하는 경우 이를 단축하고 쉘이 패턴 목록을 확장하도록 할 수 있습니다. 예를 들면 다음과 같습니다.

grep -inRw -E 'direct' . --exclude-dir={git,log,assets}

이름이 git, logassets또는인 디렉토리를 제외합니다. 예를 들면 다음과 같습니다.

grep -inRw -E 'direct' . --exclude-dir={\*git,asset\*}

git로 끝나거나 시작하는 디렉터리 이름을 제외합니다 asset.

쉘은 목록이 존재하는 경우에만 목록을 확장합니다.중괄호 안에 디렉터리 이름/전역 변수가 두 개 이상 있어야 합니다..

답변2

--exclude-dir이해하지 못하다 |.

--exclude-dir그러나 제외할 각 디렉터리에 대해 한 번씩 여러 번 지정하면 동일한 효과를 얻을 수 있습니다 .

grep -inRw -E --exclude-dir 'asset' --exclude-dir 'git' --exclude-dir 'log' 'direct'

답변3

이것이 내가 잘못한 것입니다. --exclude-dir경로 이름 대신 디렉터리 이름을 입력했습니다. 디렉토리 이름에는 /.

다음은 작동합니다:

grep -r --exclude-dir={cache,lib} pattern /home/ /var/

다음은 작동하지 않습니다:

grep -r --exclude-dir={/var/cache,/var/lib} pattern /home/ /var/

답변4

다음을 사용하세요:

grep -inRw -E 'direct' folder/ --exclude-dir={\*git\*,\*log\*,\*assets\*}

또는 현재 폴더

grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'

관련 정보