내가 사용하는 전체 트리에서 무언가를 검색하고 싶을 때
find . -type f -print0 | xargs -0 grep <search_string>
성능이나 단순성 측면에서 이를 수행하는 더 좋은 방법이 있습니까?
답변1
grep
옵션을 지원 하는지 확인하세요 -r
(예:재귀):
grep -r <search_string> .
답변2
하위 디렉터리로 재귀적으로 이동하려면 다음을 수행하세요.
grep -R 'pattern' .
이 -R
옵션은 표준은 아니지만 grep
대부분의 일반적인 구현에서 지원됩니다.
답변3
find
두 번째로 좋은 대답: 출력을 파이프로 연결하는 대신 다음을 실행할 수 있습니다.grep
find . -type f -exec grep 'research' {} '+'
짜잔, 두 개가 아닌 하나의 명령이군요!
설명하다:
find . -type f
에서 모든 일반 파일을 찾으세요.
-exec grep 'research'
grep '연구'
{}
찾은 파일 이름에
'+'
각 파일 이름에 대해 한 번 대신 모든 파일 이름에 대해 하나의 명령을 사용하십시오.
참고: ';'
각 파일 이름은 한 번씩 나타납니다.
그 외에도 소스 코드 작업에 사용하는 경우 ack
코드의 일부를 쉽게 찾을 수 있도록 설계된 코드를 볼 수 있습니다.
편집하다:
이 연구를 조금 더 확장할 수 있습니다. 먼저 -name ''
스위치를 사용하여 find
지정된 이름 지정 패턴을 가진 파일을 찾을 수 있습니다.
예를 들어:
로그에만 해당하는 파일:
-name '*.log'
c 헤더가 있는 파일에만 해당하지만 파일 확장자는 대문자나 소문자를 고집할 수 없습니다.
-iname *.c
참고: 및 와 grep
마찬가지로 이 경우 스위치는 대소문자를 구분하지 않음을 의미합니다.ack
-i
이 경우 grep은 색상과 줄 번호 없이 내용을 표시합니다.
--color
및 -n
스위치(각각 파일의 색상 및 줄 번호)를 사용하여 변경할 수 있습니다 .
결국 다음과 같은 것을 얻을 수 있습니다.
find . -name '*.log' -type f -exec grep --color -n 'pattern' {} '+'
예를 들어
$ find . -name '*.c' -type f -exec grep -n 'hello' {} '+'
./test2/target.c:1:hello
답변4
많은 수의 파일로 작업하는 경우 하위 폴더의 모든 파일을 greping하는 대신 검색해야 하는 파일을 자르면 grep이 더 빠르게 실행됩니다.
저는 가끔 다음 형식을 사용합니다.
grep "primary" `find . | grep cpp$`
.
.txt로 끝나는 하위 폴더에서 모든 파일을 찾습니다 cpp
. 그런 다음 "기본"을 찾기 위해 해당 파일을 grep하십시오.
필요한 경우 이러한 결과를 추가 grep 호출에 계속 전달할 수 있습니다.
grep "primary" `find . | grep cpp$` | grep -v "ignoreThis" | grep -i "caseInsensitiveGrep"