파일에서 텍스트를 찾고 여러 하위 폴더를 검색하는 방법은 무엇입니까?

파일에서 텍스트를 찾고 여러 하위 폴더를 검색하는 방법은 무엇입니까?

함수명을 찾고 있는데 폴더 구조도 깊고 볼 파일도 많아요.

일반적으로 나는 이와 같은 것을 선택하겠지만 find * | grep functionname이것이 최선의 접근 방식입니까?

답변1

$ find . -type f -print0 | xargs -0 grep foo
$ grep -r foo . # GNU grep only

그리고 ,zshsetopt extendedglob

$ grep foo **/*(.)

답변2

게다가ack는 이러한 작업을 위해 특별히 설계되었으며 하위 폴더 검색을 자동으로 수행합니다.

답변3

응답의 대안으로 다음 find | xargs을 사용하는 것을 고려할 수 있습니다.상표텍스트를 검색하는 것이 아니라 특히 함수 이름을 검색한다고 말씀하셨기 때문입니다.

이렇게 하려면 ctags소스 코드에 대해 파일을 실행하여 파일을 만든 TAGS다음 grep해당 파일에 대해 실행하면 TAGS다음 형식으로 줄이 출력됩니다.

{tagname}<Tab>{tagfile}<Tab>{tagaddress}

여기에는 tagname함수 이름이 포함되어 있고 tagfile해당 함수가 들어 있는 파일이며 tagaddress해당 행에 도달한 vi 명령이 있습니다. (아마도 줄번호만 있을 겁니다.)

(Eclipse에서 구축한 다양한 인덱스에 대해 유사한 작업을 수행하거나 Eclipse 데이터베이스를 쿼리하는 쉬운 방법이 있습니까?)

답변4

find . | xargs grep공백이 포함된 파일 이름은 실패합니다.

> echo test > "a b c"
> find . | xargs grep test
grep: ./a: No such file or directory
grep: b: No such file or directory
grep: c: No such file or directory

-print0에도 이 문제가 있다는 점에 유의하세요.

-exec grep모든 파일 이름을 내부적으로 처리하고 이 문제를 방지하는 find와 함께 사용하는 것이 더 낫다고 생각합니다 .

> find . -exec grep test {} \;
test
>

관련 정보