찾기 검색에서 와일드카드와 일치하는 여러 폴더를 제외하는 방법

찾기 검색에서 와일드카드와 일치하는 여러 폴더를 제외하는 방법

다음 방법을 사용하여 'tmp' 및 'logs'로 시작하는 폴더를 제외하고 '/app/test' 디렉터리에서 모든 파일과 폴더를 찾고 싶습니다.prune

그래서 다음 명령을 시도했습니다.

find /app/test -type d \( ! -name logs* \)  -o \( ! -name log \)  -o \( ! -name tmp* \)  -o
\( ! -name tmp \) -prune | tee /tmp/findall.log

하지만 다음과 같이 찾기 결과에 포함된 최상위 폴더가 표시됩니다.

/app/test/Admin/tmp/data/pm.trp
/app/test/Admin/tmp/wond/iqc.log
etc ...

뭔가 제안해주실 수 있나요?

답변1

파일 이름 와일드카드가 포함된 단어를 인용하지 않는 것 외에도 모든 테스트의 의미를 뒤집어서 -name파일 이름 와일드카드가 포함된 이름을 잘라냈습니다.아니요검색 트리에서 이러한 이름과 패턴을 일치시킵니다.

대신에:

find /app/test -type d \
    \( -name 'logs*' -o -name log -o -name 'tmp*' -o -name tmp \) -prune -o \
    -print | tee /tmp/findall.log

-prune그렇지 않은 경우 테스트에서는 -print해당 지점과 일치하는 항목의 경로 이름을 계속 인쇄합니다.

답변2

또 다른 방법:

find /app/test -type d \( -path "*/log*" -o -path "*/tmp" \) -prune -o -print | tee /tmp/findall.log

사용 시 -path전체 디렉토리 이름이 일치해야 하므로 *glob 패턴에서 앞에 오는 와일드카드 문자를 사용하십시오.

또한 "*/tmp"이라는 이름의 디렉터리에 대한 경로만 일치하며 , 또는 tmp이라는 디렉터리는 일치하지 않습니다. 반면 에 로 시작하는 디렉터리 이름을 포함한 모든 경로와 일치합니다 .tmp2tmporary"*/log*"log

-prunefind괄호 안에 일치하는 모든 디렉터리를 건너뜁니다 .

관련 정보