我尝试使用locate命令查找文件。
它在模式方面表现得有些奇怪,至少不像ls或find命令那样。
我执行以下操作:
sh@sh:~$ locate rhythmdb
/home/sh/.local/share/rhythmbox/rhythmdb.xml
sh@sh:~$ locate "rhyth*"
sh@sh:~$ locate 'rhyth*'
sh@sh:~$ locate rhyth*(Screenshot)
在我的愚见中,它也应该发现什么时候使用了星号,但它没有。
会出什么问题呢?
发布于 2013-06-24 00:47:01
来自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将找不到它,因为没有与此模式匹配的文件:由于有一个全局字符,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.*
希望这能有所帮助。
编辑。回答你的意见:如果你想在文件夹/home/sh/music/中编辑所有的jpg文件,这应该是这样做的:
locate '/home/sh/music/*.jpg'(这里没有-b,它不会工作)。请注意,这将显示文件夹/home/sh/music及其子文件夹中的所有jpg文件。您可能会尝试使用-i标志(忽略大小写),这样您还可以找到那些扩展名为大写的JPG:
locate -i '/home/sh/music/*.jpg'编辑2.更好的说法是:locate命令与数据库一起工作--这就是为什么它比find快得多。如果你有最近的文件,它们将不是located,如果你删除了一些文件,它们可能仍然是located。如果你在这种情况下(这可能是你其他评论的目的),你必须更新locate的数据库:以根用户身份,发出:
updatedb警告。命令updatedb可能需要几分钟才能完成,不用担心。
https://stackoverflow.com/questions/17262827
复制相似问题