[unix] zsh : 패턴에서 파일 제외

다음 파일이 있다고 가정 해보십시오.

|-- bar
`-- foo
    |-- type_A_1
    |-- type_A_2
    |-- type_B_1
    |-- type_B_2
    |-- type_B_xx
    |-- type_B_xx
    `-- something_else

나는 다음 명령을 생각했다

print -l foo/*~{type_B*}

인쇄 할 모든 것을 에서 foo 제외 로 시작하는 것들 type_B이지만, 대신은 foo는 아래에 모든 것을 출력하지 않습니다

foo/type_A_1
foo/type_A_2
foo/type_B_1
foo/type_B_2
foo/type_B_xx
foo/something_else

나는 또한 print -l foo/*~type_B같은 것을 시도 하고 얻었다.

~zsh에서 예외 와일드 카드는 어떻게 작동합니까?



답변

디렉토리를 예외에 포함시켜야합니다 : print -l foo/*~foo/type_A*또는 print -l foo/*~{foo/type_A*}.

원하는 경우 디렉토리를 와일드 카드로 바꿀 수 있습니다.
print -l foo/*~*/type_A*


답변

^EXTENDED_GLOB가 켜져있을 때 zsh 는 glob 연산자를 갖 습니다. 명시된 상황에 완벽하게 맞는 것 같습니다.

setopt extendedglob
print -rl foo/^type_A*

“다음 패턴과 일치하는 것을 제외하고는 무엇이든 일치”를 의미하지만 그 효과는 슬래시 사이 또는 패턴의 시작과 첫 번째 슬래시 사이 (또는이 경우와 같이) 마지막 부분 사이의 패턴 부분으로 제한됩니다. 슬래시와 패턴의 끝.

다음 과 같이 현재 활성화 된 zsh 옵션을 볼 수 있습니다 .

setopt

다음을 사용하여 EXTENDED_GLOB를 비활성화하십시오.

unsetopt extendedglob


답변