제외 패턴으로 glob 시작

제외 패턴으로 glob 시작

좀 조절하려고요마치다. 내가 가지고 있다고 가정 해 봅시다 :

$ ls
bar.baz  foo_bar.baz  foo.bar

baz로 끝나지 않는 모든 파일과 일치하도록 완성을 원하는 경우:

$ shopt|grep extglob
extglob         on
$ compgen -G "*.!(baz)"
foo.bar

글로브 제외는 예상대로 작동합니다. 그러나 foo로 시작하지 않는 모든 파일을 원한다면:

$ compgen -G "!(foo)*"
bar.baz
foo.bar
foo_bar.baz

모든 파일이 여전히 일치합니다. 아마도 이는 *여전히 일치하도록 확장될 수 있기 때문일 것입니다 foo. 제외를 사용한 다음 사용하는 전역 트릭이 있습니까 *?

Janis가 지적했듯이 foo를 제외하려면 가 필요 !(foo*)하지만 실제 사용 사례에서는 확장명도 일치해야 하므로 glob은 일반적으로 다음 형식이어야 합니다 !(foo*)*.bar(여전히 "foo" 접두사를 제외할 수는 없음).

답변1

*부정문에 the를 포함 해야 합니다 . 예를 들면 다음과 같습니다.

ls !(foo*)

편집(설명): 요청된 [확장] 와일드카드 패턴은 입니다 !(foo*). 명령과 함께 사용하는 경우 compgen호출은 다음과 같습니다.

compgen -G "!(foo*)"

compgen확장되지 않은 명령 에 패턴을 전달하려면 따옴표가 필요합니다 .

편집(질문 변경 후): 편집 질문의 전체 패턴을 보려면 @(!(foo*)|*bar)또는 중 하나를 시도하십시오 @(!(bar*)|*foo). (예상한 내용이 아닌 경우 아래 댓글을 참조하세요.)

관련 정보