bash locate with pattern with pattern
我尝试使用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) 在我的拙见中,它应该找到使用星号的时候,但事实并非如此. 有什么不对? 解决方法
从男人找到:
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定位中的第一个选项: -b,--basename Match only the base name against the specified patterns. This is the opposite of --wholename. 欢呼!这条线: locate -b "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命令适用于数据库 – 这就是为什么它比查找要快得多.如果您有最近的文件,则找不到它们,如果删除某些文件,它们可能仍然存在.如果你是这种情况(可能是你的其他评论的目的),你必须更新locate的数据库:以root身份,发出: updatedb 警告.命令updatedb可能需要几分钟才能完成,不用担心. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |