설명하다:

설명하다:

나랑 똑같은걸 묻는거같아이 문제, 하지만 요구 사항이 다릅니다. 다음은 내 파일 시스템의 예입니다.

  • /암호/
    • 내부/
      • 개발/
      • 기본/
    • 사람들/
      • 개발/
      • 기본/
      • 풀어 주다/
    • 도구/

/code/internal/dev/이며 여러 프로젝트에 대한 하위 디렉터리를 포함합니다 /code/public/dev/. 나는 /code/tools/거의 독점적으로 및 의 개발 분기에서 /code/internal/작업하며 종종 해당 디렉토리에서 텍스트 문자열 (분기 없이) /code/public/을 검색하고 싶습니다 . /code/tools/이러한 경우에는 세 가지 개별 명령을 실행해야 합니다.

$ grep -r "some string" /code/internal/dev/
$ grep -r "some string" /code/public/dev/
$ grep -r "some string" /code/tools/

이를 수행하는 명령이 있는지 궁금합니다. 그렇지 않다면 간단한 bash 스크립트를 작성해야 할 것입니다.

답변1

grep이 찾을 수 있도록 여러 경로를 연결할 수 있습니다.

grep -r "some string" /code/internal/dev/ /code/public/dev/ /code/tools/

답변2

와일드카드 사용을 최대화하고 게시한 계층 구조가 완료되면 다음을 수행할 수 있습니다.

grep -r "some string" /code/{*/dev,tools}/*.cs

설명하다:

완료하기 위한 첫 번째 단계는 지원 목록을 확장하는 것입니다. 즉, 목록의 각 쉼표로 구분된 항목에 대해 별도의 단어를 생성하고 각 단어의 접두사 및 접미사 부분을 추가합니다 foo{bar,baz}qux. foobarqux foobazqux다음을 수행하여 작동 방식을 배울 수 있습니다.

echo A{1,2,3,4}B

어느 출력

A1B A2B A3B A4B

이는 빈 인수뿐만 아니라 여러 개의 중괄호에서도 작동합니다.

echo {,1,2}{0,1,2}:{2,3}

주어진

0:2 0:3 1:2 1:3 2:2 2:3 10:2 10:3 11:2 11:3 12:2 12:3 20:2 20:3 21:2 21:3 22:2 22:3

따라서 중괄호 확장 후 명령은 다음과 같습니다.

grep -r "some string" /code/*/dev/*.cs /code/tools/*.cs

다음 단계는 와일드카드 확장입니다. 이 부분은 이미 알고 있지만 *.cs중간 디렉터리에서도 작동합니다. 또한 /뒤에 가 있으면 디렉터리만 일치합니다. 따라서 계층 구조를 고려하고 파일의 파일 이름을 구성하면 .cs다음 명령을 얻게 됩니다.

grep -r "some string" /code/internal/dev/file1.cs /code/internal/dev/file2.cs /code/public/dev/file3.cs /code/tools/file4.cs /code/tools/file5.cs

이 일이 발생한 후에야 grep이 인수 목록을 사용하여 호출됩니다(원래 명령에서도 동일한 일이 발생합니다. 표시 grep되지 않습니다 . 호출 전에 *확장이 완전히 완료됩니다 ).bashgrep

관련 정보