저는 find 명령을 사용하여 디렉터리와 일부 하위 디렉터리에 있는 소스 파일 목록을 생성하려고 합니다. 예:
/Source_Files
/dontexclude
dontexclude.h
dontexclude.c
/exclude
exclude.c
exclude.h
main.c
test.c
test.h
".c" 및 ".h"로 끝나는 파일 목록을 원하고 /exclude 하위 디렉터리의 내용을 제외하고 싶습니다.
find -name '*.c' -o -name '*.h' -o -path '*/exclude' -prune
다음 출력을 생성합니다.
./test.h
./exclude
./test.c
./main.c
./dontexclude/dontexclude.c
./dontexclude/dontexclude.h
find
"./exclude" 없이 위 목록을 어떻게 생성할 수 있나요 ?
답변1
find . -name excludeme -prune -o \
\( -name '*.c' -o -name '*.h' \) -print
기억해주세요그리고(암시적으로) 우선순위를 갖습니다.또는( -o
). (당신도 확인할 수 있습니다 -name '*.[ch]'
)
답변2
가장 간단한 변경은 -prune
(이 디렉토리를 다시 보지 마세요)를 -prune -false
(이 디렉토리를 다시 보지 마세요. 일치하지 않습니다)로 바꾸는 것입니다.
답변3
일부 추가 파일 시스템 작업을 희생하여 검색을 순수 파일로 제한합니다. exclude
파일이 아니기 때문에 디렉터리는 제외됩니다 .
find . \( -name '*.c' -o -name '*.h' -o -path '*/exclude' -prune \) -type f
답변4
이 명령은 요청한 내용을 반환합니다.
find . \( -name '*.c' -o -name '*.h' \) -a \! \( -path './exclude/*' \)