尽管发现无疑是Linux中文件搜索最受欢迎且功能强大的命令行实用工具之一,但对于需要即时结果的情况来说,它不够快。 如果要通过命令行搜索系统上的文件,并且速度是最高优先级,则可以使用另一个命令: 找到 。
在本教程中,我们将使用易于理解的示例讨论locate命令。 请注意,这里提到的所有说明/示例已在Ubuntu 16.04LTS上进行了测试,我们使用的定位版本为0.26。
1.如何在Linux中使用locate命令
locate命令非常容易使用。 所有你需要做的是传递你想要搜索的文件名。
locate [filename]
例如,如果要搜索其中包含字符串'dir2'的所有文件名,那么我可以通过以下方式使用locate:
注意 :命令'locate dir2'(无星号)也可以做为定位隐式地替换您通过的名称(称为NAME)与* NAME *。
2.命令如何工作,或者为什么这么快
找到的原因很快是因为它没有读取文件系统的搜索文件或目录名称。 它实际上是指一个数据库(由updatedb编写),以查找用户正在查找的内容,并根据该搜索生成其输出。
虽然这是一个很好的方法,但它有其缺点。 主要问题是在系统上创建每个新的文件或目录之后,需要更新工具的数据库才能正常工作。 否则,命令将无法找到在最后一次数据库更新后创建的文件/目录。
例如,如果我尝试在我的系统的'Downloads'目录中找到名称包含'tosearch'字符串的文件,那么find命令会在输出中产生一个结果:
但是当我尝试使用locate命令执行相同的搜索时,它不会产生输出。
这意味着在系统上创建文件之后,数据库定位搜索没有被更新。 所以,我们来更新数据库,可以使用updatedb命令来完成。 以下是您如何做:
sudo updatedb
现在当我再次运行相同的locate命令时,它会显示输出中的文件:
类似地,在删除文件或目录之后,您需要确保定位数据库已更新,否则命令将在搜索时继续显示其输出中的文件。
3.如何使定位打印输出中匹配条目的数量或数量
如我们所见,locate命令产生匹配文件的名称及其输出中的完整或绝对路径。 但是如果需要,您可以使该工具压制所有这些信息,而只打印匹配条目的数量或数量。 这可以使用-c命令行选项来完成。
4.如何强制找到只打印与现有文件对应的条目
正如我们在本文前面已经讨论过的,如果从系统中删除了一个文件,那么在再次更新locate数据库之前,该命令将在输出中继续显示文件名。 但是对于这种具体情况,您可以跳过更新数据库,并使用-e命令行选项在输出中仍然有正确的结果。
例如,我从系统中删除了'filetosearch.txt'文件。 find命令已被确认,该命令已经无法搜索文件:
但是当我使用locate执行相同的操作时,仍然显示输出文件:
我们知道为什么 - 因为在文件被删除之后,locate的数据库没有被更新。 但是,使用-e选项做的诀窍:
以下是定位手册页面对此选项的说明:“仅打印引用在运行定位时存在的文件的条目”。
5.如何使定位忽略大小写区分
缺省情况下,locate命令执行的搜索操作区分大小写。 但是您可以使用-i命令行选项强制该工具忽略大小写区分。
例如,我的系统上有两个文件,名为'newfiletosearch.txt'和'NEWFILETOSEARCH.txt'。 所以,你可以看到,文件名是一样的,只是他们的案例是不同的。 如果您要求找到要搜索的内容,请说“* tosearch *”,那么它的输出中只会显示小写名称:
但是使用-i命令行选项强制命令忽略这种情况,并且在输出中生成两个文件名:
6.如何使用ASCII NUL分隔输出条目
默认情况下,locate命令生成的输出条目使用换行符(\ n)分隔。 但是如果需要,您可以更改分隔符,并使用ASCII NUL而不是换行符。 这可以使用-0命令行选项来完成。
例如,我执行了与上一节中使用的相同的命令,但添加了-0命令行选项:
所以你可以看到换行符分隔符已经不再存在了 - 已被NUL替代了。
7.如何查看有关定位数据库的信息
如果您想知道哪个数据库位置正在使用,以及有关数据库的其他统计信息,请使用-S命令行选项。
8.如何使用locate来搜索精确的文件名
默认情况下,当您使用locate搜索文件名时,您传递的名称(称为NAME)将隐式替换为* NAME *。 例如,如果我搜索一个文件名'testfile',那么匹配* testfile *的所有名称都会在输出中产生:
但是要求是搜索与'testfile'匹配的名称的文件怎么办? 那么在这种情况下,你必须使用正则表达式,这可以使用-r命令行选项启用。 所以,以下是使用正则表达式搜索“testfile”的方法:
locate -r /testfile$
如果你是正式表达式的新手,请到这里 。
结论
Locate提供了更多的选择,但是我们在这里讨论的那些应该足以给出关于命令行实用程序的基本想法,以及让您开始。 我们建议您先尝试Linux机器上描述的所有选项,然后切换到可在工具手册页中找到的其他选项 。
如有任何疑问或疑问,请随时放下评论。