내 디렉토리에는 많은 파일이 포함되어 있으며 atm을 시작하지 않은 파일만 표시하고 싶습니다.
D:/elite/custom>find d:/elite/custom/test -print
d:/elite/custom/Test
d:/elite/custom/Test/001234.txt
d:/elite/custom/Test/abc123.txt
d:/elite/custom/Test/ATM001.txt
d:/elite/custom/Test/ATM002.txt
d:/elite/custom/Test/DEF111.rtf
d:/elite/custom/Test/wwww.txt
d:/elite/custom/Test/abc
D:/elite/custom>find d:/elite/custom/test -name "[!ATM]*" -print
d:/elite/custom/Test/001234.txt
d:/elite/custom/Test/DEF111.rtf
d:/elite/custom/Test/wwww.txt
왜 안 받았어요 d:/elite/custom/Test/abc123.txt
?
답변1
매개변수가 -name
호출됩니다.무늬, 쉘의 "와일드카드"(와일드카드 등)처럼 보입니다. 문법은 [!ATM]*
여러분이 생각하는 것과는 매우 다른 것을 의미합니다. 즉, A, T, M 이외의 문자로 시작하는 이름을 의미합니다.
이 패턴 atm*
(괄호가 없음에 유의)은 "atm"으로 시작하는 모든 이름과 일치합니다. 가지다패턴 없음이를 부정하고 이름 구문과 일치시킵니다.아니요"atm"으로 시작하세요. 그러나 운 좋게도 find에는 "!" 일치를 무효화하는 구문이 있습니다. "-name" 인수 앞의 부정 일치(패턴 내에 있지 않음!): find . ! -name 'atm*'
.
답변2
왜냐하면 [!ATM]
그것은 당신이 (분명히) 그것이 의미한다고 생각하는 것을 의미하지 않기 때문입니다. " A
, a T
또는 a가 아닌 모든 문자 M
"를 의미합니다.
꽤 다양한 정규식 유형을 지원하는 것 같습니다 find
. 모두 알지는 못하지만 귀하의 사용에 적합한 일치에 대해서는 낙관적이지 않습니다.
(PCRE(perl 호환 정규식) 용어로) (너비 없음) 부정 예측이 필요합니다.