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

Vit*_*meo 9 linux command-line locate wildcards coreutils

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

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

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

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

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

mpy*_*mpy 14

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

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

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

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

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

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

  • 在我的 `man locate` 中,我有: _If --regex 未指定,PATTERN 可以包含通配符。如果任何 PATTERN 不包含通配符,则 locate 的行为就像模式是 \*PATTERN*._ (3认同)