The*_*ent 19 command-line find
这个是对的:
$ find . -name *main.o
./main.o
Run Code Online (Sandbox Code Playgroud)
那么,为什么我找不到*.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]
Run Code Online (Sandbox Code Playgroud)
Let*_*ety 46
可能有多个文件匹配*.o,而只有一个文件匹配*main.o,因此,在第一种情况下,shell 扩展运行:
$ find . -name main.o
Run Code Online (Sandbox Code Playgroud)
这有效。在第二种情况下:
$ find . -name file1.o main.o
Run Code Online (Sandbox Code Playgroud)
这就是你出错的原因。
为了防止这种情况,您应该expression在两个命令中引用:
$ find . -name '*.o'
$ find . -name '*main.o'
Run Code Online (Sandbox Code Playgroud)
Ste*_*ein 16
将文件模式放在引号中。否则,* 被 shell 展开(在 find 看到它之前解析为文件列表),混淆 find。
find . -name "*.o"
Run Code Online (Sandbox Code Playgroud)