find 명령의 출력에서 ​​정리 디렉터리 이름을 제거합니다.

find 명령의 출력에서 ​​정리 디렉터리 이름을 제거합니다.

저는 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/*' \)

관련 정보