권한이 거부되면 경로 찾기 제외가 작동하지 않습니다.

권한이 거부되면 경로 찾기 제외가 작동하지 않습니다.

경로를 제외할 때 이상한 동작이 발생합니다.find:

find ~ -not -path "~/sandboxes/*" -name 'some-file.vmdk'

다음을 제공합니다:

/home/user/VMs/win/some-file.vmdk
find: ‘/home/user/sandboxes/debian7.amd64.buildd/root/...’: Permission denied
find: ‘/home/user/sandboxes/debian7.amd64.buildd/var/...’: Permission denied

뭐가 문제 야?

PS 불행히도 -prune작동하지 않습니다.

find ~ -path "/home/user/sandboxes/*" -prune -o -name 'some-file.vmdk'

더 이상한 결과를 제공합니다.

/home/user/nemu_vm/win/some-file.vmdk
/home/user/sandboxes/debian7.amd64.buildd
/home/user/sandboxes/debian9.amd64.buildd

유용한 링크

답변1

주문

find ~ -path "/home/user/sandboxes/*" -prune -o -name 'some-file.vmdk'

인쇄

/home/user/sandboxes/debian7.amd64.buildd
/home/user/sandboxes/debian9.amd64.buildd

조치가 제공되지 않을 때의 기본 조치는 발견된 경로 이름을 인쇄하는 것이기 때문입니다. 위의 경로 이름을 찾아 해당 경로를 정리합니다. 검색 경로를 잘라도 해당 경로 이름이 인쇄되지 않는 것은 아닙니다.

-print그러나 다음과 같이 끝에 추가하면

find "$HOME" -path "$HOME/sandboxes" -prune -o -name 'some-file.vmdk' -print

그러면 이러한 경로 이름은 다음과 같습니다.아니요인쇄됩니다. 이는 이제 명시적인 작업( -print)이 있으므로 기본 작업이 트리거되지 않기 때문입니다. -print의 오른쪽에만 적용 됩니다 -o.

이는 필수 사항이 아니며 특히 스크립트에서 *이 변수를 $HOME사용하기가 더 쉽습니다 .~


첫 번째 명령,

find ~ -not -path "~/sandboxes/*" -name 'some-file.vmdk'

~따옴표로 확장되지 않았기 때문에 작동하지 않을 가능성이 높습니다 .

를 사용한다고 가정하면 $HOME검색 경로도 자르지 않습니다. 즉, 계속 입력되지만 ~/sandboxes해당 경로 아래에는 경로 이름이 인쇄되지 않습니다. 디렉터리로 이동하므로 액세스할 수 없는 디렉터리에 도달하면 여전히 권한 오류가 발생합니다.

답변2

다음을 시도해 볼 수 있습니다.

find ~ \! -path "*/sandboxes/*" -name 'some-file.vmdk'

또는 -prune을 사용하세요.

find ~ -path "*/sandboxes" -prune -o -name 'some-file.vmdk'

하지만 ~/sandboxes 인쇄를 삭제하는 방법을 찾을 수 없습니다.

관련 정보