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.
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?
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.
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.