리눅스에서 디렉토리의 전체 내용에서 단어를 검색하는 방법


15

전체 컨텐츠에서 무언가를 검색해야 함

나는 노력하고있다 :

find . | xargs grep word

오류가 발생합니다.

xargs : 종료되지 않은 견적

이것을 달성하는 방법?

답변:


15

xargs다른 명령이 생성하지 않는 형식으로 입력해야하므로 효과적으로 사용하기가 어렵습니다. 여기서 잘못 된 것은 입력 할 때 이름이 따옴표로 묶어야하는 파일이 있다는 xargs것입니다 (아마도 포함 ').

grep 이 재귀 검색을 위해 -r또는 -R옵션을 지원하는 경우이를 사용하십시오.

grep -r word .

그렇지 않으면 -exec기본을 사용하십시오 find. xargs파일 이름에 제약이없는 것을 제외 하고는와 동일한 효과를 얻는 일반적인 방법입니다 . 합리적으로 최신 버전을 find사용하면 보조 명령을 한 번의 호출로 여러 파일을 그룹화 할 수 있습니다. 전달 /dev/nullgrep보장하지만 것은 하나의 파일에 호출 할 일 경우에도 각 경기의 앞에 파일 이름이 표시됩니다.

find . -type f -exec grep word /dev/null {} +

이전 버전 find(이전 시스템 또는 OpenBSD 또는 BusyBox와 같은 축소 유틸리티)에서는 한 번에 하나의 파일에서만 보조 명령을 호출 할 수 있습니다.

find . -type f -exec grep word /dev/null {} \;

일부의 버전 find과는 xargs그들이 더 인용이 필요하지 않도록 별도의 파일 이름에 널 문자를 사용하여 제대로 통신 할 수 있도록 확장이있다. 요즘에는 OpenBSD만이이 기능을 가지고 -exec … {} +있습니다.

find . -type f -print0 | xargs -0 grep word /dev/null

의 경우 +1 /dev/null. 일치하는 파일 수에 따라 출력 형식이 다를 수있는 것은 성가신 일입니다. 감사합니다.
Peter.O

12

첫 번째 옵션을 의미하는 것 같아

grep recursive, 파일 내 컨텐츠 검색

grep -R "content_to_search" /path/to/directory

재귀, 일치하는 파일 검색

ls -lR | grep "your_search"

재귀 case_insensitive-show_line_number에 대한 grep -rin

각 파일의 내용을 검색하고 싶습니다.

첫 번째 파일은 파일이 발견 된 파일을 지정하여 파일의 모든 발생을 반환합니다.

2

GNU 도구 (Linux 태그가 정확하면 수행)가 있으면 일반적인 인용 문제를 사용 -print0하고 -0해결할 수 있습니다.

find . -type f -print0 | xargs -0 grep word

0

또한 ACK , 특별한 같은 디렉토리 건너 설계 .svn, .git등을. 개발자를위한 일일 도구입니다.

일반적인 스위치의 에 매우 가깝습니다 .

전의. :

ack -r string .

ack-grep데비안 및 데비안 패키지 .



-1

파일에서 문자열을 찾으려고 생각합니다.

시험 find . -name "*" | xargs grep -l "string"


xargs의 오류 메시지 ( "Unterminated quote")는 OP에 파일이 있음을 의미합니다. 이름에 따옴표가 있습니다. 당신의 라인도 그에 부딪 칠 것입니다. mu 언급했듯이 다른 종료가 필요합니다.
thiton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.