왜 * main.o를 찾을 수 있지만 * .o를 찾을 수 없습니까?


19

이것은 맞습니다 :

$ find . -name *main.o
./main.o

왜 찾을 수 *.o없습니까?

$ find . -name *.o
find: paths must precede expression: main.o
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]


당신이 옳다고 부르는 것도 잘못되었습니다. 현재 디렉토리에 일치하는 항목이 있고 하위 디렉토리에 일치하는 항목이 있으면 둘 다 동일한 이름을 갖지 않으면 둘 다 찾을 수 없습니다. 즉 첫 번째 예에서는이라는 파일이 있었지만 ./sub/domain.o찾을 수 없었습니다.
kasperd

답변:


46

아마도 하나의 파일 *.o만 일치 하는 반면 하나의 파일 만 일치 *main.o하므로 첫 번째 경우 쉘 확장이 실행됩니다.

$ find . -name main.o

그리고 이것은 작동합니다. 두 번째 경우 :

$ find . -name file1.o main.o

그리고 이것이 오류가 발생한 이유입니다.

이를 방지하려면 expression두 명령을 모두 인용해야합니다 .

$ find . -name '*.o'
$ find . -name '*main.o'

2
실제로, echo *.ovs로 쉽게 확인할 수 있습니다 echo '*.o'.
Ruslan

@Ruslan glob ( *, ?)와 일치하는 파일이 없으면 bash 에서 파일을 리터럴 문자로 취급합니다.

@BroSlow는 의심의 여지없이 OP가 있었던 특정 상황에 대해 이야기하고있었습니다.
Ruslan

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.