디렉토리에서 특정 파일을 재귀 적으로 가져 오는 방법은 무엇입니까?


14

나는 리눅스와 grep을 처음 접했고 내 길을 찾으려고 노력했다.

를 사용 find -name *.java하면 특정 디렉토리에서 모든 Java 파일의 이름을 찾을 수 있습니다. foo이 파일에서 발생 하는 횟수를 세고 싶다고 가정 하면 어떻게해야합니까?

나는 다음과 같은 것을 시도 해왔다 :

grep -r "foo" *.java

다음과 같은 응답을 얻습니다.

grep:  *.java:  No such file or directory

어떤 아이디어?



1
죄송합니다. 다음에 더 힘들어 질 것입니다. 그 질문은 매우 비슷했습니다.
Eric Wilson

1
3512의 제목이 훨씬 나을 수 있습니다 . "기본 grep 사용 질문"은 실제 질문에 대해 많은 것을 말해주지 않습니다. 우리는 아마 그것이 해결되지 않으면 더 많은 속임수를 가질 것입니다.
Richard Hoskins

1
@ richardhoskins, 고정.
John T

답변:


16
find . -name '*.java' | xargs grep <your pattern here>

5
더 나은 방법은 공백으로 끝나는 파일 이름이 두 개의 파일 이름으로 분리되지 않도록 null로 끝나는 항목을 사용하는 것입니다. -name '* .java'-type f -print0 | xargs를 -0 그렙 <여기 패턴>
CoverosGene

1
@CoverosGene : --replace 옵션을 사용하여 xargs를 처리하여 다음과 같이 처리 할 수 ​​있습니다. ... | xargs-grep "{}"<pattern>
arathorn

고마워, 나는 무엇을하는 명령이 있어야한다는 것을 알고 있었다 xargs.
Eric Wilson

6

이러한 유형의 요구에 맞게 특별히 설계된 도구가 있습니다 : ack .

ack는 grep과 같은 도구로, 이기종 소스 코드의 큰 나무를 가진 프로그래머를 대상으로합니다.

"grep 대신 ack을 사용해야하는 10 가지 이유" 도 읽어보십시오 . 상기 ACK의 페이지입니다.


1
Meh. 실제 유닉스 도구는 abtg [ABTG 's Better Than Grep]와 같은 유산을 언급하는 재귀 적 이름이 필요합니다. ACK? 그것에 대한 유일한 좋은 생각은 개선 된 NACK의 저자가 이미 선택된 이름을 가지고 있다는 것입니다.)
Mikeage

내가 정말로 ack을 좋아하는 이유 중 하나는 파일 형식을 지정할 수 있다는 것입니다. 예를 들어, "ack --html <pattern>"을 사용하면 모든 .html, .htm, .xhtml, .dhtml 등의 파일을 한 번에 검색합니다.
Mark van Lent

Ack은 나를 위해 grep을 거의 대체했습니다.
Ryan C. Thompson


0

찾기 . -type f -name '* .java'-print0 | xargs -0 grep -wo 'foo'| 화장실 -l


3
수퍼 유저에 오신 것을 환영합니다! 최신 질문에 대한 답변 일 경우 (2009 년 답변) 답변이 이미 승인 된 답변보다 더 나은 이유를 설명 할 때 답변에 더 많은주의를 기울이게됩니다.
Eric Wilson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.