경로를 제외할 때 이상한 동작이 발생합니다.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 인쇄를 삭제하는 방법을 찾을 수 없습니다.