2016-09-29 3 views
0

나는 현재 디렉토리 (또는 서브 디렉토리)에있는 모든 파일을보고 싶다. 특정 단어가 들어있는 경우에만 파일의 이름을 되 돌린다."find"specific contents [리눅스]

더 자세히 :

발견 타입 F의 -name은 "* 안녕하세요 *"나에게 자신의 이름에 "안녕하세요"가 모든 파일 이름을 지정합니다. 하지만 그 대신 파일을 검색하고 해당 파일의 내용에 "hello"가 포함되어 있으면 파일의 이름이 인쇄됩니다.

접근 방법이 있습니까?

+0

'find-type f -exec grep -l hello {} +'또는 [silver sarcher]를 설치하십시오 (https://github.com/ggreer/the_silver_searcher) – ymonad

답변

1

당신이 그것을 많은 파일 find에서 반환에 많은 grep 인스턴스를 호출하지 않는 방식으로 효율적이다

find /path -type f -exec grep -Hi 'hello' {} + 

로 GNU find와 GNU grep를 사용할 수 있습니다. 이것은 find이 검색을 위해 grep에 대한 파일 집합을 반환한다는 기본 가정에서 작동합니다. 파일이 바보 - 증거 방법으로, 사용하지 못할 수 있습니다 경우에 당신이 확실하지 않은 경우, 파이프로 연결된 명령이 어떤 결과를 반환 할 경우에만, 당신은이 경우 xargs을 다음 명령이 실행됩니다 -r 플래그 xargs을 사용할 수 있습니다

find /path -type f | xargs -r0 grep -Hi 'hello' 
+0

감사합니다! 그러나 첫 번째 예에서 {} + 정확히 무엇을합니까? –

+0

'-exec command {} +'섹션과 http : // www 섹션 아래에있는 [man 페이지를 찾는다.] (http://man7.org/linux/man-pages/man1/find.1.html) .softpanorama.org/Tools/Find/using_exec_option_and_xargs_in_find.shtml. 나는 설명을 위해이 페이지에서 말 그대로 인용 할 것이다. :) – Inian