"def test"를 포함하는 모든 Python 테스트 스크립트를 나열하는 방법

"def test"를 포함하는 모든 Python 테스트 스크립트를 나열하는 방법

"def test"를 포함하는 모든 Python 테스트 스크립트를 나열하고 싶습니다.

명령줄은 작동하지 않지만 단일 명령은 작동합니다.

find . -name "*.py" | grep "def test"

답변1

노력하다:

grep -r --include '*.py' 'def test'
  • -rgrep에게 파일을 재귀적으로 검색하도록 지시

  • --include '*.py'로 끝나는 이름만 확인하도록 grep에 지시합니다 .py.

--include둘 다 이 옵션을 지원합니다.GNU(리눅스) grep그리고MacOS grep

파이프라인 방법에 대한 토론

다음 명령에서 find는 발견된 파일의 이름을 grep의 표준 입력에 전달합니다.

find . -name "*.py" | grep "def test"

여기서 문제는 grep이 표준 입력을 검색할 텍스트로 취급한다는 것입니다. 따라서 유일한 출력은 해당 파일입니다.이름(콘텐츠와 반대)에는 def test.

예를 들어 빈 파일을 만들어 보겠습니다.

$ touch 'def test.py'

파이프라인 명령을 실행합니다.

$ find . -name "*.py" | grep "def test"
./def test.py

이 명령은 이름을 기준으로 파일을 찾습니다. 그 내용은 검토된 적이 없습니다.

답변2

find . -name '*.py' -exec grep -l 'def test' {} \;

또는

find . -name '*.py' -exec grep -l 'def test' {} +

grep두 번째 버전은 파일 세트를 인수로 지정하여 호출을 줄입니다.

답변3

grep -ril 'def test' .

위의 명령은 찾고 있는 내용을 나열합니다.

명령에서 - 옵션 ril은 재귀적(r) 대소문자를 구분하지 않음(i) 검색 및 나열만(l) 파일 이름을 나타냅니다.

답변4

찾은 파일에서 명령을 실행하는 표준 방법은 findxargs를 사용하는 것입니다.

find . -name "*.py" | xargs grep "def test"

grep의 경우 다른 답변에서 설명하는 것처럼 find + grep 대신 재귀 grep을 사용할 수 있지만 xargs는 다른 사용 사례에도 사용할 수 있는 일반적인 접근 방식이므로 알아두는 것이 좋습니다.

(Doug O'Neal이 언급했듯이: 파일 이름에 공백이 있으면 find 및 xargs에 널 문자를 종결자로 사용하도록 지시해야 합니다 find . -name "*.py" -print0 | xargs -0 grep "def test". :)

관련 정보