Por que localizar é mais rápido que o find? [duplicado]

7

Eu estava procurando por um arquivo no meu código-fonte e tentei localizar e encontrar. Surpreendentemente, o locate estava pesquisando na máquina inteira e era mais rápido que o find, que estava pesquisando apenas no diretório atual e nos subdiretórios.

Aqui estão os meus comandos shell para ambos:

find . -name vendorsetup.sh # takes 50 seconds to search all files in curren -sub directories.

locate vendorsetup.sh # takes 20 seconds to search file in whole machine.

Por que isso?

    
por Sunil Shahu 22.07.2014 / 13:26

2 respostas

12

locate usa um banco de dados e faz periodicamente um inventário do seu sistema de arquivos. O banco de dados é otimizado para pesquisa. find precisa percorrer todo o subdiretório, o que é bastante rápido, mas não tão rápido quanto o locate.

    
por Jos 22.07.2014 / 13:30
3

Sobre a localização:

  

O Locate usa um índice que armazena em /var/lib/slocate/ , ou seja   atualizado por um trabalho Cron noturno. Este trabalho noturno normalmente é executado em   cerca de 01:00 ou 02:00 do horário local, e analisa completamente todo o seu sistema   (incluindo todas as unidades conectadas). O índice resultante é simplesmente uma lista   de nomes de arquivos. A pesquisa será tão rápida por causa da indexação feita em todos os elementos do sistema de arquivos

Mas find não é assim,

sempre que considerar a pesquisa como nova pesquisa e sem armazenamento de qualquer cache de localização de arquivos.

, então levará tempo para encontrar.

espero que ajude.

    
por Ten-Coin 22.07.2014 / 13:38

Tags