find 命令中\*.xml 和*.xml 的区别

zen*_*ngr 2 linux find

Linux/mac 中的 find 命令\*.xml*.xmlin 有什么区别

结果:

find . -name \*.xml and find . -name *.xml是不同的。但为什么?

还有,locate '*.xml'比找到更好吗?最常用的是哪一种?

gol*_*udo 5

通过转义星号,您将提供要匹配find的文字字符串*.xml,无论外壳如何,它都可以在内部将其解析为通配符。如果你未能转义或引用星号,它会在被find命令触及之前被 shell 展开。

例如,如果您somefile.xml的目录中只有一个文件,shell 将扩展通配符并将文字字符串传递somefile.xml给您的命令。IE:

sh-4.1$ find . -name *.xml
Run Code Online (Sandbox Code Playgroud)

将完全等同于:

sh-4.1$ find . -name somefile.xml
Run Code Online (Sandbox Code Playgroud)

它只会匹配那个确切的文件名。如果您的目录中有两个文件与*.xml通配符匹配,则在扩展通配符时可能会出现语法错误:

sh-4.1$ find . -name somefile.xml someotherfile.xml
find: paths must precede expression: someotherfile.xml
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
Run Code Online (Sandbox Code Playgroud)

至于是否locate更好,这实际上取决于您使用它的目的。虽然locate速度要快得多,但它依赖于预先构建的索引,因此它只与最近的索引更新一样好(通常每天更新一次,但这取决于发行版)。此外,它只返回基于文件名匹配的结果,而find允许大量选项来优化您的搜索。