-path for find에 대한 추가 질문 [닫기]

-path for find에 대한 추가 질문 [닫기]

~에서https://unix.stackexchange.com/a/81379/674

  1. -path시작 경로를 (재)정의하지 마세요. 현재 검사 대상의 시작 경로와 상대 경로의 조합을 말합니다.

    • "시작 경로"는 다음의 매개변수를 의미합니까 path?find

      find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
      
    • "현재 확인된 개체의 시작 경로와 상대 경로의 조합"이란 무엇을 의미합니까?

  2. src예를 들어, 이 기능을 사용하면 수준에 상관없이 하위 디렉터리의 모든 파일을 찾을 수 있습니다 .

    src"레벨에 관계없이 하위 디렉터리의 모든 파일 찾기" 는 어떻게 수행됩니까?

  3. "/ 또는 .를 특별히 처리하지 마십시오"는 *파일 이름(확장자 포함)과 하위 디렉터리가 모두 일치할 수 있음 [...]/file* 을 의미합니다 /file.txt./files/foo.bar

    "특별 대우 없음/또는"이 언급되지 않았 *으므로 "특별 대우 없음/또는"은 에만 적용됩니까 *?

답변1

  1. 예, "시작 경로"는 find명령 시작 부분, 옵션 뒤, 표현식 앞에 나타나는 디렉터리 이름 중 하나입니다. 나는 당신이 링크한 질문을 OP가 둘 사이의 차이점에 대해 혼동하고 있음을 나타내는 것으로 해석합니다.

    find /etc ...
    

    그리고

    find -path /etc ...
    

    • "현재 검사 대상의 시작 경로와 상대 경로의 조합을 말합니다."

      이 답변의 작성자는 , 및 파일 이 tools/crowbar포함된 이라는 디렉토리가 있다고 상상합니다 . 당신이 말하는 경우drinkfoodfoolishnesswisdom

      find tools/crowbar -path "*bar/foo*"
      

      합계는 찾을 수 있지만 다른 두 개는 찾을 수 없습니다.tools/crowbar/foodtools/crowbar/foolishness

  2. 나는 lcd047에 동의합니다. 즉, 다음과 같은 디렉터리 구조를 가지고 있다면

    .
    ├────고양이
    │ ├────개
    │ │ └────개집
    │ └────택
    │ └────src
    ├────목적지
    ├────오리지널
    │ ├────레시피
    │ └────src
    └────출처

    그 다음에

    find . -path "*/src/*"
    

    srccat, cat/dog, cat/dog/kennel, cat/tac, dest또는 original의 콘텐츠를 보고하지 않고 세 폴더 모두(및 모든 하위 디렉터리)에서 콘텐츠를 찾습니다 original/recipe.

  3. 문장의 일부만 골라서 개별적으로 의미가 있다고 기대하는 것보다 전체 단락을 읽는 것이 도움이 됩니다. -path테스트 중 토론찾기(1)설명하다,

    -path pattern

      파일 이름이 쉘 패턴과 일치합니다.무늬. 메타문자는 ' /' 또는 ' '를 특별하게 처리하지 않습니다 .. 예를 들어 다음과 같습니다.
          찾다. -경로 "./sr*sc"

      ./src/misc" "라는 디렉토리가 존재하는 경우 해당 디렉토리에 대한 항목을 인쇄합니다 . ...

    좋아, 같은 줄에 "파일 이름", "셸 패턴" 및 "메타 문자"가 표시되면 특수 패턴 문자가 있는 셸의 패턴 일치/경로 이름 확장을 생각해야 합니다. *,?, 그리고[...]. ("메타 문자"는 기본적으로 "특수 문자"에 대한 $10 단어입니다.) 그러면 다음이 *포함된 예가 표시됩니다! 그래서 무슨 말인지 알아낼 수 있어야 합니다.

    그래서, 그게 무슨 말이에요? 예제를 살펴보세요: sr*scmatch src/misc. 이는 일반적으로 match와 같은 것을 사용해야 하는 셸의 경로 이름 확장과 다릅니다. 그리고 아니요, 이는 단지 동일한 방식으로 적용되는 것이 아닙니다.sr*/*scsrc/misc*-path "sr????sc"-path "sr[cim/][cim/][cim/][cim/]sc"

    그들이 언급하지 않은 것은 쉘의 경로 이름 확장에서 일반적으로 (셸에서) 일치하지 않더라도 -path "*sr*sc" 일치할 src/misc뿐만 아니라 .src/misc일치 한다는 것입니다 . src/.misc*sr*/*sc*..

답변2

find(1)혼란을 피하기 위해 프로토타입을 다음과 같이 생각해야 합니다 .

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [dir...] [expression]

find(1)파일을 찾으세요 dir. expression발견된 파일에 적용되는 테스트로 구성된 논리식입니다. -path, -name, 는 -type그러한 테스트의 예입니다.

  1. 위의 내용은 기본적으로 -path설정되지 않는다고 말하지만 dir해당 인수는 에 상대적으로 처리됩니다 dir.

  2. 은 (는) -path '*src*'일치 ./src/foo/bar/test.c하지만 ./foo/src/bar/test.c은(는) 일치하지 않습니다 ./foo/bar/test.c.

  3. 이는 *디렉터리 전체에서 일치하는 와일드카드입니다. 또한 이것을 "확장자"가 있는 파일과 일치하도록 *작성해야 하는 DOS/Windows 세계와 혼동 해서는 안 된다고 말합니다 .*.*

아니면 적어도 그것은 내 이해입니다.

관련 정보