加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash locate with pattern with pattern

发布时间:2020-12-15 22:42:14 所属栏目:安全 来源:网络整理
导读:我尝试使用locate命令查找文件. 它表现出一些奇怪的模式,至少不像ls或find命令. 我做以下事情: sh@sh:~$locate rhythmdb/home/sh/.local/share/rhythmbox/rhythmdb.xmlsh@sh:~$locate "rhyth*"sh@sh:~$locate 'rhyth*'sh@sh:~$locate rhyth* (Screenshot)
我尝试使用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可能需要几分钟才能完成,不用担心.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读