ZSH의 부정적인 와일드카드

ZSH의 부정적인 와일드카드

ls **/*!(test).rb"test"로 끝나지 않는 모든 Ruby 파일로 확장 하려고 합니다 . 그러나 지금까지 시도한 것은 아무것도 도움이 되지 않았습니다. ZSH의 확장된 글로빙 옵션을 켜려고 했지만 성공하지 못했습니다.

유사한 작업을 수행할 수 있다는 것을 알고 있지만 ls -l **/*.rb | grep -v test와일드카드만 사용하여 수행하고 싶습니다.

답변1

setopt extended_glob; ls -d -- **/(^*test).rb

또는

setopt ksh_glob; ls -d -- **/!(*test).rb

버전( )과 다른 형식도 파일 이름의 일부 와 일치하고 부정은 빈 문자열과 일치하므로 *!(test).rb와도 일치합니다 .foo-test.rb*foo-test!(test)


"ksh-glob" 형식은 , 에서도 작동 합니다 bash.shopt -s globstar extglob

#! /bin/bash
shopt -s globstar extglob
ls -d -- **/!(*test).rb

Bash에서는 와 확장 모드 사용 사이에 개행 문자가 있어야 하며 shopt -s extglob, 두 개는 동일한 복합 명령이나 함수의 일부가 아닐 수 있습니다.

관련 정보