題 `locate`通配符奇怪的行為 - 為什麼?


locate "*.png" 返回以。結尾的所有文件 .png正如預期的那樣。

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

locate "*test" 返回以。結尾的所有文件 test正如預期的那樣。

locate "test*" 不返回任何內容,但有文件以。開頭 test 在我的系統中。

為什麼通配符似乎只適用於“以”結尾?


9
2018-06-29 10:31


起源


在創建匹配的文件後,您是否重建了locateb? test* 和 test.*? - Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams:是的 - Vittorio Romeo


答案:


locate "test.*" 不返回任何內容,但在我的系統中有名為test的文件。

. 被視為點,而不是正則表達式中的任意字符,所以 test.* 不匹配 test但是 test.foo

locate "test*" 不返回任何內容,但有文件以。開頭 test 在我的系統中。

找到商店 文件的完整路徑,所以要查找以test開頭的文件,你應該使用 locate "*/test*"

最後一點可能令人困惑,因為 locate foo 找到任何包括 foo,因此模式被解釋為 *foo*。如果模式中已經有一個通配符,那麼模式似乎沒有被星星包圍。

放棄:我做了一些測試,這些是我的結論,我不能通過引用手冊來證明它們,這看起來非常簡陋。


10
2018-06-29 10:59



在我的 man locate 我有: 如果未指定--regex,則PATTERN可以包含通配符。如果任何PATTERN不包含通配符,則locate的行為就像模式為* PATTERN *一樣。 - gniourf_gniourf