2012-07-24 2 views

답변

4

사용 find은 나무 를 걸어 다음은 while read를 사용하여 생성 목록 읽기 : 당신이 파일에 대해 수행 할 작업이 없습니다 너무 복잡하고 광석을 사용하여 표현 될 수 있다면

find . -name \*.c | while read file 
do 
echo process $file 
done 

을 또는 두 개의 명령을 사용하는 경우 while 을 피하고 find으로 모든 것을 만들 수 있습니다. 이를 위해 당신은 -exec를 사용합니다 : 여기

find . -name \*.c -exec command {} \; 

당신은 당신의 명령 대신 command 물품.

또한 -execdir을 사용할 수 있습니다 :이 경우 command에서

find . -name \*.c -execdir command {} \; 

이 (발견 된 각 파일에 대한) 찾은 파일의 디렉토리에 실행됩니다.

+0

내 이름을 -name으로 바꿔야합니까? – user1547531

+1

아니요.'-name'은 이름으로 검색하라는 find 명령에 전달되는 옵션입니다. '.'는'현재 디렉토리'를 나타내므로 프로젝트 루트에서이 명령을 실행하거나'.'을 프로젝트 루트의 경로로 대체해야합니다. '* .c '는 이름이'anthing, .c'과 일치하는 파일을 의미합니다. 그래서 프로젝트가/foo/bar에 있고 .h 파일을 찾으려면 다음을 사용하십시오 :'find/foo/bar -name * .h' – jahroy

+0

@ jahroy : Jahroy, 고맙습니다. 정확히 말하고 싶습니다. :) –

1

당신이 GNU make를 사용하는 경우, 당신은 쉘이 독립 제작의 장점 (그러나 큰 나무에 대한보다 느린 find되는 단점)가 내장 함수 만 make 년대를 사용하여이 작업을 수행 할 수 있습니다

# Usage: $(call find-recursive,DIRECTORY,PATTERN) 
find-recursive = \ 
    $(foreach f,$(wildcard $(1)/*),\ 
    $(if $(wildcard $(f)/.),\ 
     $(call find-recursive,$(f),$(2)),\ 
     $(filter $(2),$(f)))) 

all: 
    @echo $(call find-recursive,.,%.c) 
관련 문제