Especificar a opção -type melhora o desempenho de localização no linux?

0

Como você sabe, há uma opção para o comando find , que permite dizer se você está procurando por um 'arquivo' ou 'diretório'. Eu queria saber se especificando que iria melhorar encontrar desempenho (velocidade)? como:

find / -type file -name foo.bar

é mais rápido que

find / -name foo.bar

ou não faz diferença?

    
por Ali Qanavatian 20.09.2017 / 20:19

2 respostas

2

  1. Seus comandos nem funcionam, por dois motivos:

    • O diretório inicial (ou diretórios), se houver, deve sempre aparecer antes do (s) teste (s), se houver, então seus comandos teriam que ser

      find / -name foo.bar …
      
    • Geralmente você não pode dizer -type file ; deve ser -type f .

  2. Por que você suspeitaria que adicionar um teste adicional melhoraria o desempenho?
  3. Teoricamente, poderia diminuir o desempenho, porque você está fazendo

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

    em vez de

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

    ou seja, você está dando mais trabalho para fazer. Na realidade, porém, a diferença será insignificante. find já precisa obter as informações do tipo de arquivo para ver quais entradas são diretórios (e, portanto, precisa ser pesquisado recursivamente). Uma vez que tenha essa informação, verificar se é um arquivo simples requer apenas algumas instruções da CPU, e é muito rápido.

por 20.09.2017 / 21:25
1

Sim, em alguns casos, melhora o desempenho.

Por padrão, find aplica o AND lógico aos seus testes, mas o último teste não é avaliado se o primeiro for falso . Portanto, se você adicionar um teste super rápido que quase sempre falha no início, ele poderá salvar muitas execuções dos seguintes testes (digamos: lentos) e, nesse caso, esse teste adicional melhora o desempenho.

Vá para o diretório com muitos arquivos e alguns links simbólicos. Comparar

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

para

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

Este é um exemplo artificial, mas esclarecedor. Os dois testes ( -type l e -exec test -L {} \; ) fazem o mesmo trabalho, os dois comandos find geram os mesmos resultados. No entanto -exec cria processo adicional e isso é relativamente lento. No meu diretório pessoal, o primeiro comando leva dois minutos; o segundo comando leva seis segundos.

    
por 20.09.2017 / 22:14