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