find 명령에서 디렉토리를 제외할 수 있습니까? [복사]

find 명령에서 디렉토리를 제외할 수 있습니까? [복사]

find -type f특정 시작 디렉터리에서 모든 파일을 재귀적으로 찾는 명령을 사용하고 있습니다 . 그러나 특정 디렉터리를 입력하고 그 안에 있는 파일 이름을 추출하는 것을 방지하고 싶습니다. 그래서 기본적으로 다음과 같은 것을 찾고 있습니다.

find . -type f ! -name "avoid_this_directory_please"

유효한 대안이 있습니까?

답변1

이 옵션의 목적은 다음과 같습니다 -prune.

find . -type d -name 'avoid_this_directory_please' -prune -o \
    -type f -print

위의 내용을 "라는 이름의 디렉토리가 있으면 avoid_this_directory_please입력하지 말고, 그렇지 않은 경우 일반 파일이면 해당 경로 이름을 인쇄하십시오"로 해석할 수 있습니다.

최상위 검색 경로의 전체 경로 이름과 같은 다른 기준에 따라 디렉터리를 정리할 수도 있습니다.

find . -type d -path './some/dir/avoid_this_directory_please' -prune -o \
    -type f -print

답변2

디렉토리 사용을 피하려면 -path 테스트를 시도하십시오.

find . -type f ! -path '*/avoid_this_directory_please/*'

답변3

에서 man find해당 -path섹션의 다른 2가지 답변과 분명히 결합되었습니다.

To  ignore a whole directory tree, use -prune rather than
checking every file in the tree.  For example, to skip the directory
`src/emacs'  and  all  files and directories under it, and print the
names of the other files found, do something like this:

          find . -path ./src/emacs -prune -o -print

답변4

이 시도

find -name "*.js" -not -path "./directory/*"

관련 정보