有没有办法提高`查找`的速度


15

我想知道是否有一种方法可以提高find终端的速度,使用互联网Google搜索比本地搜索字符串或仅搜索文件名更快的速度没有任何意义。

我想知道是否有一种方法可以建立本地索引库,一旦建立该索引库,将来,find命令可能会非常快。

或其他建议?

谢谢!


您可以使用操作系统和/或发行版来编辑帖子吗?
朱迪C 2012年

Answers:


15

尝试使用locate,它应该做您想要的。


13
充实答案通常是一个好主意。就像提到什么包locate来自(通常slocate),并updatedb用于重建数据库一样。:-)
Patrick

1
这对于索引关闭的分区不起作用。例如,如果启用了索引,则NTFS分区的性能会下降,因此“定位”不适用于那些定位。
ojrask

9

这很大程度上取决于您的搜索条件。

如果搜索文件名或文件名模式,则定位会更快,但不适用于新生成的文件,因为通常每天仅使用一次更新索引。但是,如果您可以使用它,它将非常快。

但是使用find可以搜索文件大小,文件年龄和其他内容,而locate无法搜索这些文件。

如果你知道哪里进行搜索,您可以使用路径来划定搜索范围:

find /some/path -size -10M -size +2M -mtime -365 ...

只会在/ some / path中搜索2到10 M,最长1年的文件。

路径中可用的程序可以通过whereis搜索其中的帮助文件,lib文件和配置文件。例子:

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz

7

采用 locate

原因是locate使用一个已经存在的所有现有目录和文件的数据库,就像您想象的那样!
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

以一定的设置(和可更改的时间间隔),作业运行会扫描文件系统,然后使用该文件系统构建数据库。然后是该数据库(该数据库及其定位的适当索引)所针对的locate命令,而不是此时扫描您的硬盘驱动器。

因此,好处是与硬盘驱动器扫描相比,它非常快。不利的一面是,定位数据库(locatedb)不是“活动的”,因此只能用于上次扫描“存在”的文件。

现在运行更新b updatedb(运行,sudo updatedb如果需要的话)

顺便说一句,我只是在sudo updatedb本地跑步,花了3 1/2秒!我有31,000个文件。


1

正如其他人指出的那样,对于更简单的搜索者来说,定位可能是更好的工具。

但是,对于更复杂的搜索,您可能会陷入困境。

加快查找速度的一种方法是缩小文件的目录范围,而不是搜索所有根目录。


0

用于单个搜索操作;我没有发现任何提速。除非尝试使用find选项缩小搜索范围。

然而; 如果您要对同一组文件进行多种find操作 ; 使用所有文件名填充临时文件并使用,可以大大提高速度grep。当然,这不会考虑添加或删除的文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.