使用“locate”进行通配?

sda*_*aau 4 wildcards locate

我在 Ubuntu 11.04 上,我有:

$ locate --version
mlocate 0.23.1 [...]
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我想搜索.so文件lua名中的文件,所以我尝试使用通配符模式:

$ locate 'lua*so*'
Run Code Online (Sandbox Code Playgroud)

没有,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
Run Code Online (Sandbox Code Playgroud)

嗯,这是有效的 - 所以它已经足够好了。

但是让我感到困惑的是 - 如果手册页说在不使用正则表达式时支持通配符,我应该如何格式化我的通配符模式以使其工作?

PM *_*ing 5

您的 glob 仅在名称以lua. 试试这个 glob:

locate '*lua*so*'
Run Code Online (Sandbox Code Playgroud)