为什么我能找到*main.o却找不到*.o?

为什么我能找到*main.o却找不到*.o?

这个是正确的:

$ 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"

相关内容