찾기 | grep이 Cygwin에서 작동하지 않습니다

찾기 | grep이 Cygwin에서 작동하지 않습니다

Cygwin이 설치되어 있고 이 명령으로 소스 코드를 검색하면 파일에 해당 문자열이 있어도 아무 것도 표시되지 않습니다.

$ echo foo > bar
$ find . -name '*' | grep foo

아무것도 나타나지 않습니다. 이 명령은 GNU+Linux에서 잘 작동합니다.

$ grep foo bar

답변1

언급한 대로 find는 발견된 파일 목록을 stdout으로 출력하며, grep은 일반적으로 이런 방식으로 호출되면 stdout을 통해 검색할 것으로 예상합니다.

find를 로 파이프할 수도 있으며 xargs, "표준 입력에서 명령줄 작성 및 실행"에서와 같이

$ find . | xargs grep foo

줄 바꿈 등이 포함된 미친 파일 이름이 있는 경우 다음이 더 좋습니다.

$ find . -type f -print0 | xargs -0 grep foo

일반 파일만 검색 하므로 디렉터리 또는 "재미있는" 파일을 검색 -type f하려고 시도하지 않습니다 ....

답변2

find . -name  '*' # This will produce a list of *file names*

그런 다음 파일 이름 목록을 grepstdin에 전달하면 목록을 텍스트로 처리하고 다음을 검색합니다.foo

파일 이름이 없으므로 foo아무것도 반환하지 않습니다.

파일에서 텍스트를 찾기 위해 파일을 재귀적으로 검색하려면 다음을 사용하면 됩니다.

grep -R foo somefolder/

답변3

이 명령으로 소스 코드를 검색하면 아무 것도 표시되지 않습니다.

$ echo foo > bar
$ find . -name '*' | grep foo

find원하는 기준(이름, 크기, 파일 유형)을 충족하는 파일 이름을 검색하고 일치하는 파일 이름 목록을 반환합니다. 그것은 반환하지 않습니다내용물일치하는 파일 중

grep해당 파일 이름 목록이 파이프 연산자를 사용하여 전달되면 grep문자열 bar(파일 이름)과~ 아니다 foo(파일의 내용 bar).

grep따라서 일치하는 항목을 찾지 못하여 출력할 것이 없습니다.

메모:

  • grep파일을 직접 검색할 수 있습니다. 를 사용할 필요가 없습니다 find. 파이프 |또는 xargs다른 답변에서 제안한대로.

다음 명령은 Cygwin에서 작동합니다.

grep --exclude-dir=* "foo" ./*

예:

DavidPostill@Hal /f/test
$ cat bar
foo

DavidPostill@Hal /f/test
$ grep --exclude-dir=* "foo" ./*
./bar:foo

추가 자료

  • Linux용 Bash 명령줄의 AZ 인덱스- Bash 명령줄과 관련된 모든 것에 대한 훌륭한 참고 자료입니다.
  • 찾다- 원하는 기준(이름, 크기, 파일 유형)을 충족하는 파일 이름에 대한 폴더 계층 구조를 검색합니다.
  • grep- 특정 텍스트에 대한 파일을 검색합니다.

답변4

내 생각엔 당신이 이것을 원하는 것 같아요.

find . -name '*' -type f -exec grep foo /dev/null {} \;

디렉터리나 특수 파일이 아닌 파일만 grep하려고 합니다. /dev/null은 grep에 파일 이름을 표시합니다. '-name '*'을 제거하고 싶을 수도 있지만 그렇게 하면 도트 파일이 grep됩니다.

당신은 또한 실행할 수 있습니다

grep -r foo .

관련 정보