다음 방법을 사용하여 '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
이라는 디렉터리는 일치하지 않습니다. 반면 에 로 시작하는 디렉터리 이름을 포함한 모든 경로와 일치합니다 .tmp2
tmporary
"*/log*"
log
-prune
find
괄호 안에 일치하는 모든 디렉터리를 건너뜁니다 .