linux之文件快速搜索locate命令 - pod4g/tool GitHub Wiki
一、基本用法
locate [options] pattern
locate查找文件比find
快得多多得多,工作中一些简单快捷的查询应该尽量使用locate,如果locate找不到,则再使用find,locate不是实时的,依赖一个数据库,这个数据库一般是每天一更新,可以使用updatedb
来更新数据库。
locate后面的pattern如果没有出现通配符,则系统默认在前后加上*
号,
例如 locate showd.log
相当于 locate '*showd.log*'
,只要出现一个通配符,系统就不加*
号了,这点儿要注意
locate还可以使用正则表达式,需要加上-r
选项,具体的看locate的man page
二、加引号和不加引号的区别
假设系统中有如下的文件
/home/work/showd.log
/home/work/showdiff.sh
/home/work/cmsv2/mysqldump/showd.log
/home/work/view2/app/showd.dump
/home/work/view2/app/showd.log
/home/work/view2/app/showd.php
/home/work/view2/app/showd.sh
我们在/home/work/
下执行:
locate show*
则只会查找到
/home/work/showdiff.sh
原因是,shell会对*
号进行处理,把*
替换为当前目录下的showdiff.sh
,所以相当于执行locate showdiff.sh
接着继续执行:
locate 'show*'
则什么也没有找到,说明是把当前的*
号,作为通配符了,因为locate
命令如果没有通配符支持的话,则必须写全路径,例如locate /home/work/view2/app/showd.sh
,但是这样其实就没有什么用了,我们连路径和文件名都知道,就没必要查找这个文件了
所以要想起作用,就需要前后都加*
号,即
locate '*show*'
才能列出来所有的含有show的文件。
由于这个原因,执行
locate show
就相当于执行locate '*show*'