현재 디렉토리에서 "chrome"이라는 텍스트가 포함된 파일을 찾고 싶습니다.
$ find . -exec grep chrome
find: missing argument to `-exec'
내가 뭘 잘못했나요?
답변1
a ;
( \;
셸이 해석하지 못하도록 여기에서 이스케이프 처리됨) 또는 a +
및 a 를 놓쳤습니다 {}
.
find . -exec grep chrome {} \;
또는
find . -exec grep chrome {} +
find
실행되고 찾은 파일 이름으로 grep
대체됩니다 . 와 차이점은 각 파일에 대해 단일 명령이 실행되는 반면, 가능한 많은 파일이 한 번에 인수로 제공된다는 점입니다.{}
;
+
;
grep
+
grep
답변2
find
이를 위해 grep을 사용할 필요는 전혀 없습니다. grep은 현재 디렉터리에 있는 모든 항목의 전체 목록에서 파일을 열 수 있습니다.
grep chrome *
...또는 폴더와 그 아래의 모든 항목에 재귀적으로 추가할 수도 있습니다.
grep chrome . -R
답변3
find . | xargs grep 'chrome'
다음과 같이 할 수도 있습니다.
find . | xargs grep 'chrome' -ls
첫 번째는 파일의 행을 표시하고 두 번째는 파일을 나열합니다.
Caleb의 옵션은 더 깔끔하며 더 적은 수의 키 입력이 필요합니다.
답변4
다음은 내가 일반적으로 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"