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

二、加引号和不加引号的区别

详见:linux之命令加单引号和不加的区别

假设系统中有如下的文件

/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*'