찾기에서 디렉토리를 올바르게 제외하는 방법은 무엇입니까?

찾기에서 디렉토리를 올바르게 제외하는 방법은 무엇입니까?

이 질문에 따르면:찾기에서 디렉토리를 제외하는 방법, 명령은 다음과 같아야 합니다.

find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o -print

하지만 만약 내가 그렇게 한다면

find . -type d \( -path "./.cpan" -o -path "./.mozilla" -o "./.cache" \) -prune -o -print

그것은 다음을 제공합니다: find: paths must precede expression: ./.cache'

find: possible unquoted pattern after predicate -o'?

하지만 나는 인용문을 썼습니다.

그리고 -path옵션 다음에는 경로가 절대 경로여야 하나요, 아니면 상대 경로여야 하나요? 현재 디렉토리를 포함시켰는데 ./[somefile]이것이 에 필요합니까 -path?

답변1

-path마지막 옵션 값 앞의 조건자를 놓쳤습니다."./.cache"

에서 사용되는 경로는 -path에서 사용되는 최상위 검색 경로로 시작해야 합니다 find. 예를 들어

  • find . -path './something/here'
  • find /etc -path '/etc/init.d'

*파일 시스템 트리에서 위치를 지정하지 않고 디렉터리 이름을 일치시키려면 와일드카드를 사용해야 할 수도 있습니다 . 이 예는 -type f디렉토리 아래의 모든 파일( )과 일치합니다.wizard

  • find . -path '*/wizard/* -type f -print

답변2

미래의 독자들을 위해 POSIX 호환 솔루션을제외된 디렉터리를 탐색하지 말고 출력에 전혀 포함하지 마세요.일반적인 형식은 다음과 같습니다.

단일 제외

find searchpath \! \( -path searchpath/excludepath -prune \)

여러 제외

find searchpath \! \( \( -path searchpath/excludepath1 -o -path searchpath/excludepath2 -o -path 'searchpath/excludepathprefix-*' \) -prune \)

순회를 방지하면거대한해당 디렉토리에 많은 파일이 포함되어 있는 경우 성능이 향상됩니다. 출력에서 제외된 디렉터리를 완전히 생략하면 해당 디렉터리에서 실수로 작동하는 것을 방지할 수 있습니다.

추가 필터 및 출력 매개변수를 배치할 수 있습니다.~ 후에-maxdepth항상 바로 뒤에 배치되는 것을 제외하고 표시된 모든 것 searchpath. 인수는 해당 디렉터리에 대한 출력 -path과 일치해야 하며 find와일드카드는 이스케이프/따옴표로 묶어야 합니다.


이 질문에 대한 해결책은 다음과 같습니다( -print기본값이므로).

find . \! \( \( -path ./.cpan -o -path ./.mozilla -o -path ./.cache \) -prune \)

답변3

find 명령이 여러 디렉토리를 제외하도록 정보를 검색할 때 이 페이지로 이동합니다. 나는 의 답을 찾는다월프가장 우아한. 내 실험에서 동일한 개념을 기반으로 한 변형은 다음과 같습니다.

find . \( -path ./.cpan -o -path ./.mozilla -o -path ./.cache \) -not -prune -o -print

관련 정보