다음과 같은 파일이 있다고 가정해 보겠습니다.
|-- 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