경로 트리밍으로 명령 시작점 찾기

경로 트리밍으로 명령 시작점 찾기

공부를 안 해도 늘 이런 고민이 있어요.

다른 디렉터리에서 시작점의 파일을 검색할 때 시작점의 전체 경로를 제공했지만 작동하지 않았습니다. 시작 디렉터리에 있고 시작 지점의 전체 경로를 제공하는 경우에도 동일한 일이 발생합니다.

find /path/from/start/. -path './anaconda3/*' -prune -o -name '*R' -print

마치 사탕이 들어 있는 것처럼 "Trim" 디렉터리로 직접 이동하세요.

내가 출발점에 있다면 처음부터 시작 .하는 것이 좋습니다. 그렇지 않으면 find내가 탈출하려는 경로가 잘리지 않습니다.

find . -path './anaconda3/*' -prune -o -name '*R' -print

일하다.

어쩌면 자세한 답변을 통해 이 문제를 해결할 수 있을 것입니다. 때로는 배우게 되지만 다음에 명령을 받게 되면 find이전에 한 번도 해본 적이 없는 것과 같은 동일한 문제에 직면하게 될 것입니다. 매뉴얼 페이지의 이 장은 -path pattern무언가를 말하려고 시도하지만 그것은 vogon에 있는 것 같고 바벨 피시는 없습니다.

답변1

-path생성된 전체 경로 이름과 일치합니다 find. 로 시작하면 경로 이름이 이것으로 시작됩니다. ( 필요하지 않고 복잡할 뿐임) .로 시작하면 경로 이름이 로 시작됩니다 ./path/from/start/./path/from/start

따라서 전체 경로를 일치시켜야 합니다.

find /path/from/start -path '/path/from/start/anaconda3/*' -prune -o -name '*R' -print

이 부분은 자체적으로 다듬어지기 때문에 마지막 부분 /path/from/start/anaconda3도 필요하지 않습니다 ./*

find /path/from/start -path /path/from/start/anaconda3 -prune -o -name '*R' -print

기본적으로 -path시작 경로가 "표준" 경로에서 반복된다는 점을 기억해야 합니다.

find /path/from/start -path /path/from/start/anaconda3 -prune -o -name '*R' -print
     ^^^^^^^^^^^^^^^^       ^^^^^^^^^^^^^^^^

find . -path './anaconda3/*' -prune -o -name '*R' -print
     ^        ^

이것이 삭제하려는 유일한 디렉토리이거나 anaconda3모든 디렉토리를 삭제하려는 경우 anaconda3다음을 사용할 수 있습니다 -name.

find /path/from/start -name anaconda3 -prune -o -name '*R' -print

이 모든 것은 여러 시작 경로를 지정하는 경우에도 적용됩니다. 각 -path표현식은 모든 시작 경로에서 생성된 전체 경로 이름과 일치합니다. 따라서 다음을 가질 수 있습니다.

find /path/from/start /otherpath/from/elsewhere \
     -path /path/from/start/anaconda3 -prune -o \
     -path /otherpath/from/elsewhere/anaconda3 -prune -o \
     -name '*R' -print

관련 정보