`locate`通配符奇怪的行为-为什么?


9

locate "*.png".png按预期返回所有以结尾的文件。

locate "test.*"不会返回任何东西,但是test我的系统中有命名的文件。

locate "*test"test按预期返回所有以结尾的文件。

locate "test*"不会返回任何内容,但是test我的系统中有一些开头的文件。

为什么通配符似乎仅适用于“结尾为”?


1
在创建与test*和相匹配的文件之后,您是否重建了locatedb test.*
伊格纳西奥·巴斯克斯

@ IgnacioVazquez-Abrams:是的
Vittorio Romeo

Answers:


12

locate "test.*" 不会返回任何内容,但是我的系统中有名为test的文件。

.被视为点,而不是正则表达式中的任意字符,因此test.*不匹配test,而是test.foo

locate "test*"不会返回任何内容,但是test我的系统中有一些开头的文件。

查找存储文件的完整路径,因此要查找以test开头的文件,应使用locate "*/test*"

最后一点可能令人困惑,因为locate foo发现包括在内的任何内容foo,因此模式被解释为*foo*。如果该模式中已经存在一个通配符,则该模式似乎未包含在星号中。

免责声明:我做了一些测试,这些是我的结论,我无法通过引用手册页来证明它们,这似乎非常初级。


3
在我的电脑man locate中:如果未指定--regex,则PATTERN可以包含通配符。如果任何PATTERN都不包含通配符,则定位的行为就像该模式为* PATTERN *。
gniourf_gniourf 2013年
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.