这个是正确的:
$ 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]
答案1
可能有多个文件匹配*.o
,但只有一个文件匹配*main.o
,因此,在第一种情况下,shell 扩展运行:
$ find . -name main.o
并且成功了。在第二种情况下:
$ find . -name file1.o main.o
这就是您收到错误的原因。
为了防止这种情况,您应该expression
在两个命令中引用:
$ find . -name '*.o'
$ find . -name '*main.o'
答案2
将文件模式放在引号中。否则,* 会被 shell 扩展(在 find 看到它之前解析为文件列表),从而混淆 find。
find . -name "*.o"