zsh: 패턴에서 파일 제외

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에서 예외 와일드카드는 어떻게 작동합니까?

답변1

다루기 힘든^EXTENDED_GLOB가 켜져 있을 때 glob 연산자가 있습니다. 이는 귀하가 설명하는 상황에 완벽하게 맞는 것 같습니다.

setopt extendedglob
print -rl foo/^type_A*

이는 "패턴과 일치하는 항목을 제외한 모든 항목과 일치"를 의미하지만 그 효과는 슬래시 사이, 패턴 시작 부분과 첫 번째 슬래시 사이 또는 (이 예에서와 같이) 패턴 부분으로 제한됩니다. 마지막 슬래시와 패턴의 끝.

당신은 볼 수 있습니다다루기 힘든현재 활성화된 옵션:

setopt

EXTENDED_GLOB를 비활성화합니다.

unsetopt extendedglob

답변2

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

필요한 경우 디렉터리를 와일드카드로 바꿀 수 있습니다. print -l foo/*~*/type_A*

답변3

출력을 grep -v다음으로 파이프할 수도 있습니다.V어 grep:

# list all filenames in foo not including "type_B"
ls foo/ | grep -v type_B

관련 정보