我正在查询特定目录以查看是否能找到具有特定模式的文件,并且我一直在尝试使用两个不同的命令:
标准find
命令:
find -L $unix_dir\*/ -maxdepth $maxdepth -name \"$filepattern\"
以及命令tree
替换grep
:
tree -L $maxdepth -l -i -f $unix_dir*/ | grep '$filepattern'
第二个命令是否出于某种原因应该更快?我发现它有时更快,但有时与其他命令一样快,我不确定这两者背后的理论是什么。有什么想法吗?
答案1
我认为第二个比较慢,因为它涉及两个过程tree
,grep
而第一个只有一个过程find
。
此外,tree
将其找到的所有文件的名称写入其输出流,然后由使用grep
。同时,find
仅打印匹配文件的名称。
使用时find
,它会尝试匹配仅文件名到您指定的$filepattern
。在第二种情况下,模式应用于完整路径的文件。因此,第二种情况需要处理的数据更多。
另一方面,这次测试的瓶颈是磁盘IO。find
和都tree
遍历目录。
如果您依次运行每个测试,操作系统将缓存有关目录和文件名的数据,因此命令将更快地完成。
答案2
该命令find
在屏幕上写入更多字符,因为它始终写入文件的完整路径。此外,在 find 命令中与文件模式的比较可能会更长(取决于实现)。例如,使用伪代码:
寻找
- 提取文件名
- 比较文件名和文件模式
树
- 比较文件名和文件模式