내 생각에 글로벌 패턴은 다음과 같다.
**/(*|.*)
점( )으로 시작하거나 시작하지 않는 모든 폴더와 파일을 나타내지 .
만 현재 디렉터리에서 로 시작하는 디렉터리는 건너뜁니다 .
.
글로브 패턴은 무엇을 의미합니까?
.
현재 폴더와 다음으로 시작하거나 시작하지 않을 수 있는 더 깊은 폴더의 모든 파일과 폴더
반품:위와 같은 재귀 glob 패턴에서 특정 폴더(또는 더 나은 glob 하위 패턴)를 제외하려면 어떻게 해야 합니까?
.hg
현재 레벨에서 폴더를 제외하기 위해 다음을 시도했습니다 (단, .
해당 문자로 시작하는 다른 폴더는 포함함).
**~.hg/*
그러나 더 깊은 디렉토리로 재귀적으로 이동하지는 않습니다.
답변1
glob 패턴을 도트 파일과 일치시키는 가장 쉬운 방법은 다음을 사용하는 것입니다.D
글로벌 예선.
**/*(D)
우선 순위 가 ~
낮 /
으므로 일치 항목이 **~.hg/*
차감됩니다 . 그러나 이는 a 이전에만 특별하므로 여기서는 현재 디렉터리의 파일과 일치합니다. 제외하려면 해당 내용이 필요합니다.**
.hg/*
**
/
.hg
**/*~.hg~.hg/*(D)
zsh는 여전히 .hg
디렉토리를 탐색하므로 시간이 걸릴 수 있습니다. 이는 제한 사항입니다 **
. 이 수준에서는 제외 목록을 직접 설정할 수 없습니다.
답변2
**/*(D)
(의 약어 (*/)#*(D)
)에는 위에서 설명한 대로 도트파일과 도트디렉터리가 포함됩니다.
모든 수준에서 디렉터리를 제외하려면 다음을 .hg
수행해야 합니다.
(^.hg/)#^.hg(D)
(AND 연산자가 필요합니다 setopt extendedglob
)^
#
언급한 대로 ~pattern
항목은 제외됩니다(전체 확장이 "패턴"과 일치하는지 여부에 따라).뒤쪽에목록은 하위 디렉터리로 내려가는 것을 방지하기 위해 생성됩니다.