我想知道是否有一种方法可以提高find
终端的速度,使用互联网谷歌进行搜索比本地搜索字符串或仅文件名具有更好的速度是没有意义的。
我想知道是否有一种方法可以拥有本地索引库,一旦建立,将来 find 命令可能会超级快。
或者还有其他建议吗?
谢谢!
答案1
尝试使用locate
,它应该做你想要的。
答案2
这在很大程度上取决于您的搜索标准。
如果您搜索文件名或文件名模式,locate 速度要快得多,但不适合新生成的文件,因为所使用的索引通常每天仅更新一次。但如果你能使用它,它的速度超级快。
但是,使用 find 可以搜索文件大小、文件年龄和其他内容,而这些是通过locate 无法搜索的。
如果你知道的话在哪里要搜索,您可以使用小路界定搜索范围:
find /some/path -size -10M -size +2M -mtime -365 ...
只会搜索 /some/path 中 2 到 10 M 的文件,最多 1 年的文件。
路径中可用的程序可以通过以下方式搜索哪个;帮助、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
如果您对使用 -exec、-execdir、-ok 或 -okdir 找到的每个文件(例如 GNU-find 中可用)执行程序,则可以一次将多个文件传递给程序(如果程序支持使用以下命令调用)多个参数,用“+”而不是“;”结束命令。例子:
find -name "*.pdf" -exec ls -l {} "+"
这可以显着加快整个过程,但很大程度上取决于个人情况。
答案3
使用locate
原因是locate
使用所有现有目录和文件的数据库已经建成就像你想象的那样!
http://linux.about.com/od/commands/l/blcmdl5_ locatedb.htm
在某个设定(且可更改)的时间间隔,作业运行会扫描文件系统,然后用它构建数据库。然后,该locate
命令将针对此数据库( locatedb )及其适当的索引进行操作,而不是在此时扫描您的硬盘驱动器。
所以好处是它是非常与硬盘扫描相比速度更快。缺点是定位数据库 (locatedb) 不是“实时”的,因此只能用于上次扫描“截至”时存在的文件。
要更新 locatedb,请立即运行updatedb
(或sudo updatedb
如果需要)
顺便说一句,我刚刚sudo updatedb
在本地运行,花了 3 1/2 秒!我有 31,000 个文件。
答案4
对于单个搜索操作;我没有发现任何加速;除非尝试使用选项缩小搜索范围find
。
然而;如果你想做find
对同一组文件进行多次操作;使用所有文件名填充临时文件并使用grep
.当然,这不考虑添加或删除的文件。