it-swarm.dev

find -exec를 실행하는 방법?

현재 디렉토리에서 "chrome"이라는 텍스트가 포함 된 파일을 찾고 싶습니다.

$ find . -exec grep chrome
find: missing argument to `-exec'

내가 무엇을 잘못하고 있지?

538
ripper234

; (Shell이 ​​해석하지 못하도록 \;로 이스케이프 됨) 또는 +{}를 놓쳤습니다.

find . -exec grep chrome {} \;

또는

find . -exec grep chrome {} +

findgrep를 실행하고 {}를 찾은 파일 이름으로 대체합니다. ;+의 차이점은 ;를 사용하면 각 파일에 대해 단일 grep 명령이 실행되는 반면 +는 파일 수가 많은 것입니다 가능한 한 한 번에 grep에 매개 변수로 제공됩니다.

801
bmk

이를 위해 find을 사용할 필요는 없습니다. grep은 현재 디렉토리의 모든 목록에서 파일 열기를 처리 할 수 ​​있습니다.

grep chrome *

... 또는 폴더와 그 아래의 모든 항목에 대해 재귀 적으로 :

grep chrome . -R
51
Caleb
find . | xargs grep 'chrome'

당신은 또한 할 수 있습니다 :

find . | xargs grep 'chrome' -ls

첫 번째는 파일의 행을 보여주고 두 번째는 파일을 나열합니다.

Caleb의 옵션은 깔끔하고 키 입력이 적습니다.

20
Mathew

찾기는 한 가지 방법이며 the_silver_searcher 그러면 필요한 것은

ag chrome

모든 파일 (하위 디렉토리 포함)에서 chrome을 검색하고 찾기보다 빠릅니다.

7
Ask and Learn

다음은 일반적으로 find/exec를 사용하는 방법의 예입니다.

find  . -name "*.py" -print -exec fgrep hello {} \;

이것은 모든 .py 파일을 재귀 적으로 검색하고 각 파일에 대해 파일 이름과 fgrep를 파일마다 'hello'로 출력합니다. 출력은 다음과 같습니다 (오늘 실행했습니다).

./r1.py
./cgi-bin/tst1.py
print "hello"
./app/__init__.py
./app/views.py
./app/flask1.py
./run.py
./tst2.py
print "hello again"
5
jon

줄 대신 파일 목록을 보려면

grep -l "chrome" *

또는:

grep -r -l "chrome" .
3
mateusz.szymborski