Kentnotes의 경우는 grep
으로 입력 할 수 없습니다. 단순히 충분히 강력하지 않습니다. 트릭은 find
을 사용하여 검색 할 파일을 결정하고 find
이 생성하는 파일 목록을 grep
으로 전달하는 것입니다.
당신이 man find
를 실행하면
, 당신은
find
걸리는
많은 옵션의 man 페이지를 얻을 수 있습니다. 우리가 여기에 관심있는 것은
-maxdepth
입니다.
필요한 명령을 작성해 봅시다. 그것이 어떻게 생겼는지보고 각 단계에서 명령을 실행
find .
현재 폴더 (.
) 또는 하위 폴더에있는 모든 파일과 폴더를 나열합니다.
find . -maxdepth 1
은 현재 폴더의 모든 파일과 폴더를 나열합니다. find . -maxdepth 2
은 현재 폴더의 모든 파일과 폴더와 모든 즉각적인 하위 폴더를 나열합니다. 등등 ...
우리는 폴더도 나열되어 있습니다. grep
은 폴더 자체를 검색 할 수 없기 때문에 폴더의 파일 만 검색 할 수 있습니다. -type f
을 추가하면 나열된 파일 만 가져옵니다 : find . -maxdepth 2 -type f
.
이제 검색 할 파일을 알고 있으므로 grep
을 검색해야합니다.이 작업을 수행하는 표준 방법은 xargs
을 사용하고 있습니다 :
find . -maxdepth 2 -type f | xargs grep <text-to-search-for>
을 |
이 xarg
의 "표준에"표준 출력 ", 일명"표준 출력 ", find
에서 (즉, 당신이 일반적으로 화면에 표시되는 내용) 및 파이프 걸립니다 입력 ", 일명"표준 ", 즉 실행중인 프로그램에 타이핑 할 때 일반적으로 일어날 일.
xargs
은 stdin에서받은 모든 인수를 추가 한 후 사용자가 여기 (grep <text-to-search-for>
)로 알려주는 교활한 작은 프로그램입니다. 결과적으로 grep
은 find
이 찾은 모든 파일을 검색합니다.
xargs
공간이 하나의 파일 이름 대신 두 개의 다른 파일 이름을 구분한다고 생각하기 때문에 일부 파일 이름에 공백이있는 경우에는 작동하지 않습니다. 이 문제를 해결할 수있는 방법이 많이 있습니다 (파일 이름에 공백을 사용하지 않는 것이 이상적입니다). 일반적인 것은 find
이라는 멋진 기능 중 하나를 사용하는 것입니다.
find
에 인수를 추가하면 ;
또는 +
까지 지정한 모든 항목이 실행됩니다. {}
(리터럴 문자 {
및 }
)을 추가하면 모든 파일 목록으로 바뀝니다. find
이 그렇게하고 있기 때문에 파일 이름의 공백이 파일 이름에 있어야한다는 것을 알고 있습니다. 따라서
당신이하려고하는 일을 할 수있는 가장 좋은 방법은 이렇게입니다 :
이
find . -type f -maxdepth 2 -exec grep <text-to-search-for> {} +
(+
및 ;
로 끝나는 사이의 차이는 여기에 차이가 없습니다 당신이 관심이 있다면이 man find
에, 그러나. 짧은 버전은 +
이 빠르지 만 명령에 {}
을 하나만 가질 수 있다는 것을 의미합니다.)
find/path/to/find -name "nameofthefile"또는 cat 각 파일을 다음과 같이하고 싶습니다. 문자열을 확인 하시겠습니까? –