我使用的是 Ubuntu 11.04,其中有:
$ locate --version
mlocate 0.23.1 [...]
该man locate
页面说:
如果未指定 --regex,PATTERN 可以包含通配符。如果任何 PATTERN 不包含通配符,locate 的行为就像该模式是 *PATTERN*。
好的,来做一个小测试:首先,只需搜索“lua”即可 - 但会返回大量(500+)结果:
$ locate 'lua' | head -5
/boot/grub/hwmatch.lua
/etc/alternatives/lua-compiler
/etc/alternatives/lua-compiler-manual
/etc/alternatives/lua-interpreter
/etc/alternatives/lua-manual
$ locate 'lua' | wc -l
560
我想搜索文件名中.so
包含的文件lua
,因此我尝试使用通配模式:
$ locate 'lua*so*'
没有,0 个结果。所以我尝试使用正则表达式:
$ locate --regex 'lua.*so.*' | head -5
/usr/lib/libipelua.so.7.0.10
/usr/lib/liblua5.1.so
/usr/lib/liblua5.1.so.0
/usr/lib/liblua5.1.so.0.0.0
/usr/lib/gtk-2.0/2.10.0/engines/libluaengine.so
嗯,这很有效——所以它已经足够好了。
但令我困惑的是 - 如果手册页说不使用正则表达式时支持通配符,我应该如何格式化我的通配符模式才能使其工作?
答案1
仅当名称以 开头时,您的 glob 才会匹配lua
。试试这个全局:
locate '*lua*so*'