来自man locate
:
If --regex is not specified, PATTERNs can contain globbing characters. If any
PATTERN contains no globbing characters, locate behaves as if the pattern
were \*PATTERN*.
因此,当您发出
locate rhyth*
locate
不会找到它,因为没有与此模式匹配的文件:因为有一个 glob 字符,所以 locate 会真正尝试匹配(在正则表达式中):^rhyth.*
并且显然没有这样的匹配(在完整路径上)。
在您的情况下,您可以尝试:
locate "/home/sh/.local/share/rhythmbox/rhyth*"
或者
locate '/rhyth' # equivalent to locate '*/rhyth*'
但这不是很好,不是吗?
现在,看看第一个选项man locate
:
-b, --basename
Match only the base name against the specified patterns. This
is the opposite of --wholename.
欢呼!该行:
locate -b "rhyth*"
应该按您的意愿工作:找到具有基本名称匹配的文件(在正则表达式中):^rhyth.*
希望这可以帮助。
编辑。回答您的评论:如果您想要文件夹中的locate
所有jpg文件/home/sh/music/
,应该这样做:
locate '/home/sh/music/*.jpg'
(不在-b
这里,它不会工作)。请注意,这将显示文件夹及其子文件夹中的所有jpg文件。您可能很想使用该标志(忽略大小写),以便您还可以找到具有大写JPG扩展名的标志:/home/sh/music
-i
locate -i '/home/sh/music/*.jpg'
编辑 2.最好在某处说:该locate
命令适用于数据库——这就是为什么它可以比find
. 如果你有最近的文件,它们不会是locate
d,如果你删除了一些文件,它们可能仍然是locate
d。如果您在这种情况下(这可能是您的其他评论的目的),您必须更新locate
's database: as root,发出:
updatedb
警告。该命令updatedb
可能需要几分钟才能完成,不用担心。