특정 이름을 갖고 내용에 특정 문자열이 포함된 모든 파일의 위치를 ​​찾는 방법은 무엇입니까?

특정 이름을 갖고 내용에 특정 문자열이 포함된 모든 파일의 위치를 ​​찾는 방법은 무엇입니까?

index.php"hello"라는 문자열이 포함된 모든 파일의 위치를 ​​찾고 싶습니다.

감사해요.

답변1

grep다음과 함께 사용 find:

find /top-dir -type f -name index.php -exec grep -l 'hello' {} +

/top-dir검색하려는 최상위 디렉토리의 경로는 어디에 있습니까?

를 사용하면 -type f일반 파일만 살펴보고 find이름 이 . -name index.php인 파일로 검색을 제한합니다 index.php.

-exec grep -l 'hello' {} +발견된 파일에 대해 실행되고 패턴( )과 일치하는 모든 파일의 경로를 grep출력합니다 . 'hello'그것은 경로의 출력을 유발합니다 -l.grep

마지막으로 +find통화마다 가능한 많은 파일이 제공됩니다 grep. 이를 ';'또는 로 변경하면 한 번에 하나의 파일이 호출 \;되므로 grep파일이 많으면 속도가 느려질 수 있습니다.

답변2

명령에서 grep다음을 사용하십시오 find.

find -type f -name "index.php" -exec grep -q 'hello' '{}' \; -exec echo '{}' \;

답변3

Bash 쉘을 사용하는 경우 하위 디렉토리에서 일치 globstar하는 옵션을 활성화한 다음 정상적으로 사용하십시오.**grep

shopt -s globstar
grep -l hello **/index.php

shopt -s globstar(비활성화 옵션을 사용하지 않는 한 이 작업은 셸에서 한 번만 수행하면 됩니다 shopt -u globstar.)

답변4

다른 두 가지 명령 방법 find:

find -type f -name "index.php" -exec grep -l 'hello' {} \;

find -type f -name "index.php" -exec grep -q 'hello' {} \; -print

관련 정보