linux:tree -i -f -L $depth 是否比 find -maxdepth $depth 更快?

linux:tree -i -f -L $depth 是否比 find -maxdepth $depth 更快?

我正在查询特定目录以查看是否能找到具有特定模式的文件,并且我一直在尝试使用两个不同的命令:

标准find命令:

find -L $unix_dir\*/ -maxdepth $maxdepth -name \"$filepattern\"

以及命令tree替换grep

tree -L $maxdepth -l -i -f $unix_dir*/ | grep '$filepattern'

第二个命令是否出于某种原因应该更快?我发现它有时更快,但有时与其他命令一样快,我不确定这两者背后的理论是什么。有什么想法吗?

答案1

我认为第二个比较慢,因为它涉及两个过程treegrep而第一个只有一个过程find

此外,tree将其找到的所有文件的名称写入其输出流,然后由使用grep。同时,find仅打印匹配文件的名称。

使用时find,它会尝试匹配仅文件名到您指定的$filepattern。在第二种情况下,模式应用于完整路径的文件。因此,第二种情况需要处理的数据更多。

 
另一方面,这次测试的瓶颈是磁盘IO。find和都tree遍历目录。
如果您依次运行每个测试,操作系统将缓存有关目录和文件名的数据,因此命令将更快地完成。

答案2

该命令find在屏幕上写入更多字符,因为它始终写入文件的完整路径。此外,在 find 命令中与文件模式的比较可能会更长(取决于实现)。例如,使用伪代码:

  • 寻找

    • 提取文件名
    • 比较文件名和文件模式
    • 比较文件名和文件模式

相关内容