부정을 사용하여 디렉터리를 제외하려고 시도했지만 디렉터리가 여전히 패턴 일치에 나타납니다.
bash-4.3$ ls
file_1.txt testdir
bash-4.3$ shopt extglob
extglob on
bash-4.3$ echo !(*/)
file_1.txt testdir
bash-4.3$
내가 뭘 잘못했나요?
for
참고: 루프 [
나 명령을 사용할 수 있다는 것을 알고 있지만 구체적으로 알아내고 find
싶습니다 .extglob
답변1
당신은 , , ... /
에 있을 수 없습니다 .@(...)
!(...)
*(...)
/
glob 사이에만 나타나거나 a[x/y]b
고려될 수도 있습니다 @(a\[x)/@(y\]b)
. glob은 먼저 분할 /
되고 각 부분은 디렉터리의 내용과 일치됩니다. 그러나 ksh glob 확장자가 있는 경우 내부 확장자는 x(...)
분할되지 않지만 각 glob 부분은 여전히 파일 이름과 일치합니다. 에서는 현재 디렉터리의 모든 파일 이름과 일치합니다. 분명히 파일 이름에는 포함할 수 없으므로 일치하는 항목이 없으므로 모든 파일과 일치합니다./
(...)
!(*/*)
*/*
/
!(*/*)
zsh
여기서는 glob 한정자를 사용해야 합니다 .
echo *(^/)
디렉토리를 제외한 모든 유형의 파일에서 작동합니다. 또는 's (디렉토리 유형의 모든 파일) bash
의 반대 입니다.*/
심볼릭 링크 해결 후):
echo *(-^/)
(디렉토리도 아니고 디렉토리 심볼릭 링크도 아닌 파일)