Existem os comandos find
e locate
para procurar arquivos no disco.
Eu sei que find
processa recursivamente todos os subdiretórios necessários para pesquisar arquivos e, portanto, é lento, mas atualizado, enquanto locate
usa um banco de dados que é atualizado de vez em quando (quando exatamente?) Para mostrar rapidamente resultados que podem estar desatualizados.
Há outras diferenças lá? Em quais situações um prefere um ou outro? E quando o locate
banco de dados é atualizado normalmente?
anacron
serve. Não sei se ele está instalado por padrão em sistemas / servidores de desktop, mas está em notebooks. Ele é executado durante a inicialização e verifica se alguma tarefa cron deve ter sido executada enquanto o sistema estava desligado e as executa. É realmente útil, mas pode causar alguns problemas se você tiver trabalhos agendados longe da meia-noite. Isso pode fazer com que o trabalho a ser executado na inicialização e, em seguida, novamente quando o tempo vem-se - possivelmente muito menos do que 24 horas depois (para um trabalho diário.)Respostas:
locate
é realmente bom apenas para encontrar arquivos e exibi-los para humanos. Você pode fazer algumas coisas com ele, mas eu não confiaria o suficiente para analisar e - como você diz - é impossível garantir o estado do banco de dados interno, mais ainda porque ele está programado para ser executado apenas/etc/cron.daily/mlocate
uma vez por dia!find
está vivo. Filtra, exclui, executa. É adequado para análise. Pode gerar caminhos relativos. Pode gerar caminhos completos. Pode fazer coisas com base em atributos, não apenas em nomes.locate
certamente tem um lugar na minha caixa de ferramentas, mas geralmente é bem embaixo como um último esforço para encontrar algo. É mais fácil do quefind
também.fonte
locate
que é muito mais rápido se eu quiser pesquisar em todo o meu sistema de arquivos. E você pode atualizar manualmente o banco de dados usandoupdatedb
antes de usá-lo.sudo updatedb
)? E há uma chance de ver quantos anos o banco de dados tem?grep run-parts /etc/crontab
Você verá que eles estão sendo gerenciadosanacron
(o que você veráman anacron
é mais resistente a sistemas que não estão ativos o tempo todo). Pelo que posso ver, deve executá-lo na inicialização, se você perder o horário cron original.-exec command {} \;
executar um comando em todos os arquivos encontrados. Eu gosto de usar olocate -b
que restringe a localização para encontrar arquivos que correspondam ao componente final do nome - sem o restante do caminho. Costumo experimentar isso primeiro porque é muito rápido. Além disso, você pode executar asudo updatedb
qualquer momento que desejar atualizar o banco de dados de localização.ls -R | grep 'file_name.txt'
Por mais que eu goste de Oli (o que é muito!), Eu discordo dele no
find
comando. Eu não gosto dissofind
comando leva mais de três minutosTomemos, por exemplo, este comando simples:
Demora mais de três minutos para
find
pesquisar tudo a partir de/
. Por padrão, resmas de mensagens de erro são exibidas e você deve procurá-las para encontrar o que está procurando. Ainda assim, é melhor dogrep
que procurar em toda a unidade uma string que leva 53 horas : `grep`ing todos os arquivos de uma string leva muito tempoEu sei que posso mexer nos parâmetros do comando find para fazê-lo funcionar melhor, mas o ponto aqui é a quantidade de tempo que leva para executar.
locate
comando leva menos de um segundoAgora vamos usar
locate
:O comando localizar leva menos de um segundo!
updatedb
executar apenas uma vez por dia por padrãoÉ verdade que o
updatedb
comando que atualiza o banco de dados de localização é executado apenas uma vez por dia, por padrão. Você pode executá-lo manualmente antes de procurar arquivos adicionados recentemente usando:Embora isso leve três segundos, é pequeno em comparação aos
find
3 ou mais minutos do comando.Atualizei meu
sudo crontab -e
para incluir a linha na parte inferior:Agora, a cada cinco minutos
updatedb
é executado e olocate
banco de dados de comandos está quase sempre atualizado.Mas não há atributos?
Você pode canalizar a
locate
saída para outros comandos. Se, por exemplo, você deseja os atributos do arquivo, pode usar:Sumário
Postei esta resposta para mostrar a velocidade e facilidade de uso de
locate
. Tentei abordar algumas das falhas de comando apontadas por outros.O
find
comando precisa percorrer toda a estrutura de diretórios para encontrar arquivos. Olocate
comando possui seu próprio banco de dados, o que lhe confere a velocidade da luz em comparação.fonte
locate / display-auto-brightness
leva 17 segundos e também exibe todos os diretórios e arquivos em todos os discos.--regex
foi necessário porque houve muitos resultados retornados com minha string de pesquisa. Encontrarei dois novos exemplos para encontrar, localizar e atualizar minha resposta em alguns minutos.find
comando significa "imprimir os nomes de arquivos de todos os arquivos nos diretórios/
edisplay-auto-brightness
". Eu acho que você pretendia usarfind / -name display-auto-brightness
, mas mesmo isso imprime muitos erros indesejados "Permissão negada".