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
允许使用大量选项来优化您的搜索。