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