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

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

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

结果:

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

另外,locate '*.xml'比 find 更好吗?哪一个最常用?

答案1

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

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

sh-4.1$ find . -name *.xml

完全等同于:

sh-4.1$ find . -name somefile.xml

这将仅匹配该确切的文件名。如果您的目录中有两个文件与*.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]

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

相关内容