Existe uma maneira de aumentar a velocidade do `find`

15

Gostaria de saber se existe uma maneira de aumentar a findvelocidade no terminal, não faz sentido que o uso da internet google para pesquisar tenha uma velocidade melhor do que fazer uma pesquisa local por seqüências de caracteres ou apenas nomes de arquivos.

Gostaria de saber se existe uma maneira de ter uma base de indexação local, uma vez criada, no futuro, o comando find pode ser super rápido.

Ou alguma outra sugestão?

Obrigado!

Daniel
fonte
Você pode editar sua postagem com seu sistema operacional e / ou distribuição?
Jodie C

Respostas:

15

Tente usar locate, ele deve fazer o que você quiser.

Wojtek Rzepala
fonte
13
Geralmente, é uma boa idéia detalhar a resposta um pouco mais. Como mencionar de que pacote locatevem (geralmente slocate) e usar updatedbpara reconstruir o banco de dados. :-)
Patrick
1
Isso não funciona para partições com a indexação desativada. Por exemplo, partições NTFS sofrem com um desempenho ruim se a indexação estiver ativada, portanto, o local não funcionará para aqueles "como deveriam".
Ojrask
9

Depende muito do seu critério de pesquisa.

Se você procurar nomes de arquivos ou padrões de nome de arquivo, a localização será muito mais rápida, mas não adequada para arquivos gerados recentemente, pois o índice usado é normalmente atualizado apenas uma vez por dia. Mas se você pode usá-lo, é super rápido.

Mas com o find você pode procurar o tamanho, a idade do arquivo e outras coisas que não são pesquisáveis ​​por localização.

Se você souber onde pesquisar, poderá usar o caminho para delimitar o escopo da pesquisa:

find /some/path -size -10M -size +2M -mtime -365 ...

pesquisaria apenas arquivos de 2 a 10 M, com no máximo 1 ano em / some / path.

Os programas disponíveis no caminho podem ser pesquisados ​​através dos quais, ajuda, lib e arquivos de configuração com whereis. Exemplos:

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz
Usuário desconhecido
fonte
7

Usar locate

O motivo é que locateusa um banco de dados de todos os diretórios e arquivos existentes que já foram criados exatamente como você imaginou!
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

Em algum intervalo definido (e mutável), uma tarefa executada varre o sistema de arquivos e, em seguida, cria um banco de dados. É nesse banco de dados (localizadob), com os índices apropriados que o locatecomando contraria, em vez de varrer o disco rígido nesse ponto.

Portanto, a vantagem é que é muito rápido em comparação com uma verificação no disco rígido. A desvantagem é que o banco de dados de localização (localizadob) não é 'ativo'; portanto, só pode ser usado para arquivos que existiam 'a partir da' última verificação.

Para atualizar o localb agora execute updatedb(ou sudo updatedbse necessário)

btw Acabei de correr sudo updatedblocalmente e levou 3 1/2 segundos! Eu tenho 31.000 arquivos.

Michael Durrant
fonte
1

Como outros já apontaram, a localização pode ser uma ferramenta melhor para um pesquisador mais simples.

No entanto, para pesquisas mais complexas, você provavelmente está preso à busca.

Uma maneira de acelerar a busca é restringir em qual diretório seus arquivos estão, em vez de pesquisar em todo o diretório raiz.

bigdaveyl
fonte
0

para uma única operação de pesquisa; Não encontrei nenhuma aceleração; a menos que tente restringir a pesquisa usando as findopções.

Contudo; se você deseja executar várias findoperações no mesmo conjunto de arquivos ; Eu obtive uma aceleração significativa ao preencher um arquivo temporário com todos os nomes de arquivos e usando grep. Obviamente, isso não leva em consideração os arquivos adicionados ou excluídos.

Chris Maes
fonte