하위 디렉터리에서만 파일 찾기

하위 디렉터리에서만 파일 찾기

C 파일을 검색하고 싶다고 가정해 보겠습니다. 내 하위 디렉토리에서만 검색하려면 어떻게 해야 합니까?

나는 시도했지만 ls -R | egrep .c$이것은 또한 .c현재 디렉토리의 파일을 검색합니다. 현재 디렉터리의 파일을 필터링하고 하위 디렉터리의 파일만 고려하는 방법은 무엇입니까?

답변1

엄밀히 말하면 하위 디렉토리에는

ls */*.c

하위 디렉터리의 하위 디렉터리 내에서 재귀적으로

find */ -type f -name '*.c' -print

답변2

find물론 Triple이 말한 것처럼 파일 와일드카드(예: 별표 확장)를 사용할 수 있지만... 그 명령은 나를 오그라들게 합니다.

명령 을 사용할 때 find원하는 작업을 정확하게 알려주는 데 사용할 수 있는 내장 플래그가 많이 있으므로 ls파일 와일드카드를 사용할 이유가 없습니다. 그리고 많은 이유가 있습니다아니요도착하다. 예를 들어,파일 글로빙은 일반적으로 숨겨진 파일이나 디렉터리를 무시합니다. 이는 이름이 점으로 시작하는 모든 파일 또는 이름이 점으로 시작하는 디렉터리(또는 디렉터리의 하위 디렉터리)에 있는 파일을 의미합니다.무시됩니다. 어쩌면 그것이 당신이 원하는 것일 수도 있지만, 파일 글로빙을 사용하면 find지금 처럼 쉽고 직접적으로 제어할 수 없습니다 .

Find는 작업에 적합한 도구입니다. 원하는 옵션은 -mindepth다음과 같습니다.

find . -mindepth 2 -type f -iname '*.c'

이 명령은 현재 디렉토리 내의 디렉토리 또는 그보다 더 아래 수준에 있는 이름이 .c또는 로 끝나는 모든 파일(디렉토리가 아닌 파일, 특수 파일이 아닌 파일)을 찾습니다 .C. (이 -iname플래그는 대소문자가 무시됨을 의미합니다.)

(이것은 심볼릭 링크를 따르지 않습니다. 일반적으로 원하는 방식이지만 man find이 동작을 조정하는 방법을 확인할 수 있습니다.)

참고로 나 또한 ls이 명령을 배우기 전에 꽤 오랫동안 파이프를 사용했지만 이것이 확실히 더 나은 접근 방식이다. 이 링크에 제공된 실용적인 명령이 실제로 시작하는 데 매우 유용하다는 것을 알았습니다.grepfindfind사용 find일상 업무에서:http://www.thegeekstuff.com/2009/03/15-practical-linux-find-command-examples/

답변3

-깊이+1을 사용하여 현재 폴더에 대한 검색을 제거할 수 있습니다.

find . -type f -name '*.c' -depth +1 -print

관련 정보