나랑 똑같은걸 묻는거같아이 문제, 하지만 요구 사항이 다릅니다. 다음은 내 파일 시스템의 예입니다.
- /암호/
- 내부/
- 개발/
- 기본/
- 사람들/
- 개발/
- 기본/
- 풀어 주다/
- 도구/
- 내부/
/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
되지 않습니다 . 호출 전에 *
확장이 완전히 완료됩니다 ).bash
grep