[완료] find 명령시 종종 나오는 에러 : paths must precede expression
글쓴이: DwYoon / 작성시간: 목, 2005/11/24 - 5:41오후
$ find -name *.bak find: paths must precede expression Usage: find [-H] [-L] [-P] [path...] [expression]
위 에러는 cygwin 셸 환경에서 난 것이고, 리눅스 환경에서도 종종 저런 에러가 납니다. 패쓰를 넣지 않아서 나는 에러라고 생각하고 -name 전에 패쓰를 넣어도 같은 에러를 뿌릴 때가 있고, 그냥 실행이 잘 될 때도 있고요.
제가 뭘 잘못한 걸까요?
Forums:
[code:1]$ find . -name '*.bak'[/code:1]
$ find . -name '*.bak'
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
감사합니다. 간단한 방법이 있었군요. 그런데, 왜[code:1]
감사합니다. 간단한 방법이 있었군요. 그런데, 왜
는 아무 이상 없이 실행이 되는데,
은 에러를 뱉는 걸까요?
왜 *.c 는 패쓰로 인식하지 않고, *.bak 는 패쓰로 인식한 건가요?
moc.soolge.nooynowead
[quote="DwYoon"]감사합니다. 간단한 방법이 있었군요. 그런데
'...'로 묶이지 않은 와일드카드는 실제로 프로그램에 넘겨지기 전에 치환되는 과정을 거칩니다. (예를 들어서 *.html이 index.html blah.html secret.html 식으로 치환됩니다) 하지만 치환할 파일이 하나도 없다면 치환되지 않습니다. 이 경우 find를 실행한 디렉토리에 *.bak 파일은 있는데 *.c 파일은 없다는 거겠죠. 일반적으로 find를 쓰실 때는 ''를 써야 한다고 생각하시면 편할 겁니다.
- 토끼군
*, ?, []와 같은 wildcard pattern은 shell에 의해
*, ?, []와 같은 wildcard pattern은 shell에 의해서 확장되어서 전달되기 때문에, *.bak, *.c와 같은 문자열이 그대로 전달되지 않는다고 봐야 합니다. 그대로 전달된다면, 현재 디렉토리에 그 패턴에 맞는 파일이 없기 때문입니다.
따라서 이런 wildcard pattern을 명령에 전달하기 위해서는 ''나 ""로 둘러싸야 합니다. *.c를 그냥 전달했는데 제대로 동작했다면, 아마도 현재 디렉토리에 *.c에 해당하는 파일이 없었기 때문일 겁니다. 마찬가지로 *.bak가 동작하지 않은 것은, 현재 디렉토리에 *.bak에 매칭되는 파일이 있었기 때문일 겁니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기