이름에 "a", "b" 또는 "c"가 포함되지 않은 이 디렉터리의 모든 파일 이름을 찾습니다.

이름에 "a", "b" 또는 "c"가 포함되지 않은 이 디렉터리의 모든 파일 이름을 찾습니다.

a, b 또는 c 문자가 포함되지 않은 디렉토리의 모든 파일을 찾으려고 합니다. 왜 이 명령이 작동하지 않습니까?

ls *[!abc]*

예: 예: MATCH: xyz, dkh, file, foo가 일치하지 않음: bar, bxc, azi, csk

답변1

귀하의 명령은 귀하가 원하는 것과 매우 유사한 작업을 수행합니다. 즉, 파일 이름 목록으로 확장됩니다.아니요정확하게 말하면 a, b, 또는 c. 테스트하면 다음이 표시됩니다.

$ touch a b c d
$ ls *[!abc]*
d

그러나 다른 파일을 만들고 다시 테스트하는 경우:

$ touch argh
$ ls *[!abc]*
argh d

이러한 문자가 포함된 파일 이름을 어디서나 제외하려면 다음을 사용하십시오.

$ shopt -s extglob
$ ls !(*[abc]*)
d

확장된 glob을 사용하는 또 다른 접근 방식은 패턴을 명시적으로 나열하는 것입니다.

$ ls !(*a*|*b*|*c*)
d

관련 정보