我想使用“查找”和“定位”来搜索项目中的源文件,但它们需要很长时间才能运行。是否有我不知道的更快的替代这些程序的方法,或者加快这些程序性能的方法?
答案1
在项目中搜索源文件
使用更简单的命令
一般来说,一个项目的源代码可能位于一个地方,可能位于几个嵌套不超过两三个深度的子目录中,因此您可以使用(可能)更快的命令,例如
(cd /path/to/project; ls *.c */*.c */*/*.c)
利用项目元数据
在 C 项目中,您通常会有一个 Makefile。在其他项目中,您可能会有类似的东西。这些可以快速提取文件列表(及其位置)编写一个脚本,利用此信息来定位文件。我有一个“源”脚本,这样我就可以编写类似 的命令grep variable $(sources programname)
。
加速查找
尽量少搜索,尽量少find / …
用find /path/to/project …
。尽量简化选择标准。如果效率更高,可以使用管道来推迟某些选择标准。
另外,您可以限制搜索的深度。对我来说,这大大提高了“查找”的速度。您可以使用 -maxdepth 开关。例如“-maxdepth 5”
加快定位
确保它正在索引您感兴趣的位置。阅读手册页并使用适合您任务的任何选项。
-U <dir>
Create slocate database starting at path <dir>.
-d <path>
--database=<path> Specifies the path of databases to search in.
-l <level>
Security level. 0 turns security checks off. This will make
searchs faster. 1 turns security checks on. This is the
default.
无需搜索
也许您搜索是因为您忘记了某样东西在哪里,或者没有人告诉您。在前一种情况下,请记下笔记(文档);在后一种情况下,请询问?惯例、标准和一致性会大有帮助。
答案2
我使用了 RedGrittyBrick 答案中的“加快定位速度”部分。我创建了一个较小的数据库:
updatedb -o /home/benhsu/ben.db -U /home/benhsu/ -e "uninteresting/directory1 uninteresting/directory2"
然后指着locate
它说:locate -d /home/benhsu/ben.db
答案3
如需查找替代品,请查看自由度。它比原始的 find 命令具有更简单/更直观的界面,并且速度更快。
答案4
我使用的策略是应用-maxdepth
以下选项find
:
find -maxdepth 1 -iname "*target*"
重复增加深度,直到找到您要找的东西,或者您厌倦了寻找。前几次迭代可能会立即返回。
这可以确保您不会浪费前期时间查看大量子树的深度,而您要查找的内容更有可能位于层次结构的底部附近。
下面是一个自动化此过程的示例脚本(当您看到所需内容时按 Ctrl-C):
(
TARGET="*target*"
for i in $(seq 1 9) ; do
echo "=== search depth: $i"
find -mindepth $i -maxdepth $i -iname "$TARGET"
done
echo "=== search depth: 10+"
find -mindepth 10 -iname $TARGET
)
请注意,所涉及的固有冗余(每次传递都必须遍历前几次传递中处理的文件夹)将主要通过磁盘缓存进行优化。
为什么不find
将此搜索顺序作为内置功能?可能是因为如果您认为冗余遍历是不可接受的,那么实现起来会很复杂/不可能。该-depth
选项的存在暗示了这种可能性,但可惜……