指定 -type 选项是否可以提高 Linux 中的查找性能?

指定 -type 选项是否可以提高 Linux 中的查找性能?

如您所知,命令有一个选项find,可让您判断您是在寻找“文件”还是“目录”。我想知道指定该选项是否会提高查找性能(速度)?例如:

find / -type file -name foo.bar

find / -name foo.bar

或者说这并没有什么区别?

答案1

是的,在某些情况下它确实提高了性能。

默认情况下,find对其测试应用逻辑与,但是如果前者为假,则不会评估后者的测试。因此,如果你添加一个几乎总是在一开始就失败的超快测试,那么它可以节省许多后续(比如说:慢速)测试的执行,在这种情况下,这个额外的测试提高性能。

进入包含许多文件和少量符号链接的目录。比较

time find -exec test -L {} \; -print

time find -type l -exec test -L {} \; -print

这是一个人为的但很有启发性的例子。两个测试(-type l-exec test -L {} \;)执行相同的工作,两个find命令产生相同的结果。但是-exec会产生额外的进程,而且速度相对较慢。在我的主目录中,第一个命令需要两分钟;第二个命令需要六秒。

答案2

  1. 您的命令甚至不会起作用,原因有二:

    • 起始目录(或多个目录)(如果有)必须始终出现在测试(如果有)之前,因此您的命令必须是

      find / -name foo.bar …
      
    • 一般来说你不能说-type file;应该是-type f

  2. 为什么你甚至会怀疑添加额外的测试会提高性能?
  3. 从理论上讲,它可以减少表现,因为你正在做

    if (filename = "foo.bar"  AND  filetype = "f")
        print filename
    

    代替

    if (filename = "foo.bar")
        print filename
    

    也就是说,你给它更多的工作要做。但实际上,差异可以忽略不计。  find已经必须获取文件类型信息才能查看哪些条目是目录(因此需要递归搜索)。一旦它获得了这些信息,检查它是否是纯文件只需要几个 CPU 指令,而且速度非常快。

相关内容