와일드카드 부정

와일드카드 부정

와일드카드 확장의 보완적인 결과를 얻는 방법은 무엇입니까?

roc이름에 포함된 파일을 나열하려면 다음을 실행하면 됩니다.

ls *roc*

roc하지만 해당 이름이 없는 모든 파일을 원한다면 어떻게 해야 할까요?

ls *[!r][!o][!c]*그리고ls *[!roc]*

작동 안함. 이 "반대" 확장을 수행하는 쉬운 방법이 있습니까?

참고: 저는bash

답변1

bash셸은 다음을 사용하여 활성화하면 확장된 글로빙 모드를 지원합니다.

shopt -s extglob

활성화되면 이 패턴은 일치하지 않는 숨겨진 이름이 아닌 모든 이름 , 즉 문자열을 포함하지 않는 모든 이름 !(*roc*)과 일치합니다 .*roc*roc

bash매뉴얼 에서 :

extglob내장 옵션을 사용하여 셸 옵션을 활성화 하면 shopt여러 확장 패턴 일치 연산자가 인식됩니다. 다음 설명에서 a는 pattern-list로 구분된 하나 이상의 패턴 목록입니다 |. 복합 패턴은 다음 하위 패턴 중 하나 이상을 사용하여 형성될 수 있습니다.

?(pattern-list) 주어진 패턴이 0개 또는 1개 발생하는 것과 일치합니다.

*(pattern-list) 주어진 패턴의 0개 이상의 발생과 일치합니다.

+(pattern-list) 주어진 패턴과 하나 이상 일치합니다.

@(pattern-list) 주어진 패턴 중 하나와 일치

!(pattern-list) 주어진 패턴 중 하나를 제외한 모든 항목과 일치

답변2

참고: 이는 귀하가 요청한 내용이 아니며 요청한 내용에 대한 해결 방법일 뿐입니다.

보통 나는 문제를 다시 생각해서 다음과 같이 합니다.

ls * | grep -v roc

나는 1년에 한 번 사용할 수 있는(그래서 잊어버릴 수도 있는) 것을 찾는 것보다 일반적인 도구(및 내가 사용하는 일반적인 명령)를 사용하는 것을 선호합니다.

와일드카드를 사용하면 매우 복잡해질 수 있습니다. 쉘마다 결과가 다르므로 잠재적으로 스크립트를 이식할 수 없게 됩니다.

관련 정보