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*
그런 다음 파일 이름 목록을 grep
stdin에 전달하면 목록을 텍스트로 처리하고 다음을 검색합니다.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 .