为什么我可以找到* 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 2014年

Answers:


46

可能有不止一个文件match *.o,而只有一个文件match *main.o,因此,在第一种情况下,shell扩展运行:

$ 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是英寸
鲁斯兰

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.