find를 사용하여 디렉터리를 탐색할 때 경로를 실제로 제외하는 방법

find를 사용하여 디렉터리를 탐색할 때 경로를 실제로 제외하는 방법

다음을 수행하면:

mkdir /tmp/test
sudo mkdir /tmp/test/test2
sudo chmod 700 /tmp/test/test2
cd /tmp/test  

find ./ -not -path "*"나는 test2가 경로가 아닌 규칙과 일치하는지 확인 하고 싶습니다 . 이를 통해 완전히 배제되어야 합니다. 그러나 규칙에 관계없이 디렉토리를 순회하려는 시도가 이루어졌음 find: ‘./test2’: Permission denied을 의미합니다 .find

sudo로 명령을 실행하면 디렉터리가 나열되지 않습니다. 이는 제외 규칙이 작동하지만 초기 루트 중 탐색 조건이 아닌 초기 검색의 출력에 적용된다는 의미입니다.

시간이 많이 걸리는 네트워크 파일 시스템 마운트 등 특정 문제가 있는 디렉터리를 제외하면서 루트 파일 시스템 순회를 구현하려고 하므로 전체 실행 시간을 줄이기 위해 하위 디렉터리를 탐색하지 않고 직접 살펴보고 싶습니다.

이 목표를 어떻게 달성할 수 있나요?

답변1

문제의 디렉터리를 "정리"해야 합니다. 이는 find해당 디렉터리의 내용을 처리하지 않도록 지시합니다.

find . -path "*" -prune

좀 더 현실적으로,

$ find . -name test2 -prune
./test2

이것은 여전히 test2​​자체적으로 처리되지만 들어가려고 시도하지 않으므로 오류가 발생하지 않습니다.

관련 정보