根据名字来查找文件
命令语法格式
locate [OPTION]… PATTERN…
命令描述
命令locate读取由updatedb(8)创建的一个或多个数据库,并将与至少匹配一个PATTERN的文件名写入标准输出,每行一个。
如果未指定–regex,则PATTERN可以包含通配符。如果任何“PATTERN”中不包含通配符,则等同于指定了“*PATTERN*”一样。
默认情况下,命令locate不会检查数据库中找到的文件是否仍然存在(但如果使用updatedb(8)的“–require-visibility no”构建数据库,则确实需要所有父目录是存在的)。
命令locate永远不会输出在最近更新相关数据库之后创建的文件,因为这些文件还没有索引到数据库。
命令支持的选项及含义
-c, –count
在标准输出上,仅输出匹配条目的数量,而不是输出文件名。
-d, –database DBPATH
用DBPATH替换默认数据库。参数DBPATH是一个以冒号(:)分隔的数据库文件名列表。如果指定了多个–database选项,则生成的路径是单独路径的串联。
空数据库文件名由缺省数据库替换。如果数据库文件名为”-“表示标准输入。请注意,只能从标准输入读取一次数据库。
-e, –existing
仅打印执行locate时存在的文件的条目。
-L, –follow
检查文件是否存在时(即指定了–existing选项),对符号链接指向的文件进行查找。这会导致从输出中省略损坏的符号链接。
这是默认的行为。选项–nofollow与此相反。
-P, –nofollow, -H
检查文件是否存在时(即指定了–existing选项),只是检查符号链接是否存在,而不是符号链接指向的文件是否存在。因此符号链接损坏,也会像其他文件一样打印出来。
这与–follow相反。
-l, –limit, -n LIMIT
找到LIMIT条目后成功退出。 如果指定了–count选项,则结果计数也是限于LIMIT条。
-0, –null
使用NUL字符分隔输出中的条目,而不是每个条目在单独的行上。此选项旨在与GNU的xargs(1)的–null选项进行互操作。
-S, –statistics
将有关每个读取的数据库的统计信息写入标准输出,而不是搜索文件并成功退出。
-q, –quiet
不要输出有关读取和处理数据库时遇到的错误消息。
控制匹配行为
-A, –all
仅打印与所有PATTERN匹配的条目,而不是仅要求其中一个匹配。
-r, –regexp REGEXP
搜索是使用基本正则表达式REGEXP。如果使用此选项,则不允许使用PATTERN参数,但可以多次指定此选项。
–regex
将所有的PATTERN视为扩展正则表达式。
-i, –ignore-case
匹配是忽略大小写。
-b, –basename
仅将基本名称(basename)与指定的模式匹配。这与–wholename相反。
-w, –wholename
整个路径名称与指定模式匹配的。这是默认行为。这与–basename相反。
其他选项
–help
显示帮助信息并退出。
–version
显示版本信息并退出。
-s, –stdio
该选项已经忽略,用于兼容BSD和GNU的locate实现。
-m, –mmap
该选项已经忽略,用于兼容BSD和GNU的locate实现。
注意事项
未指定处理请求的数据库的顺序,这允许locate出于安全原因重新排序数据库路径。
命令locate尝试与slocate和GNU locate兼容(没有用于创建数据库的选项),按此顺序进行尝试。这就是不切实际的默认–follow选项以及令人困惑的–regex和–regexp选项集的原因。
短选项-r与GNU的locate不兼容,它对应于–regex选项。使用长选项名称可以避免混淆。
在BSD和GNU的locate中,环境变量LOCATE_PATH用于替换默认数据库。但在该实现和slocate中,它被添加到其他数据库中。
相关环境变量
LOCATE_PATH
其他数据库的路径,添加在默认数据库或使用–database选项指定的数据库之后。
相关文件
/var/lib/mlocate/mlocate.db
默认数据库搜索路径。
退出状态
如果找到任何匹配条目,或者使用–limit 0、–help、–statistic、–version选项之一调用locate命令,则locate以状态为“0”退出。如果未找到匹配项,或遇到致命错误,则locate以状态为“1”退出。
读取数据库时,遇到的错误并不是致命错误,则会在指定的其他数据库(如果有)中继续搜索。
使用示例
要搜索名为“NAME”(不是“*NAME*”)的文件,请使用:
因为“\”是一个通配符,所以这会禁用“*NAME*”隐式替换“NAME”,只有要通配符就不会把没有“通配符的NAME”替换成”*NAME*“(这是locate的一个默认行为,前面提到过)。
相关手册
updatedb(8)
参考文献
- man 1 locate, Version mlocate 0.26
更新日志
- 08/06/2018 创建文章