Existe-t-il un moyen d'augmenter la vitesse de recherche


15

Je me demande s'il existe un moyen d'augmenter la findvitesse dans le terminal, cela n'a pas de sens que l'utilisation d'Internet Google pour rechercher ait une meilleure vitesse que de faire une recherche locale de chaînes ou simplement des noms de fichiers.

Je me demande s'il existe un moyen d'avoir une base d'indexation locale, une fois construite, à l'avenir, la commande find pourrait être super rapide.

Ou d'autres suggestions?

Merci!


Pouvez-vous modifier votre message avec votre système d'exploitation et / ou votre distribution?
Jodie C

Réponses:


15

Essayez d'utiliser locate, il devrait faire ce que vous voulez.


13
C'est généralement une bonne idée d'étoffer un peu plus la réponse. Comme mentionner de quel paquet locatevient (généralement slocate), et utiliser updatedbpour reconstruire la base de données. :-)
Patrick

1
Cela ne fonctionne pas pour les partitions dont l'indexation est désactivée. Par exemple, les partitions NTFS souffrent de mauvaises performances si l'indexation est activée, donc la localisation ne fonctionnera pas pour celles "comme il se doit".
ojrask

9

Cela dépend beaucoup de votre critère de recherche.

Si vous recherchez des noms de fichiers ou des modèles de noms de fichiers, la localisation est beaucoup plus rapide, mais ne convient pas aux fichiers fraîchement générés, car l'index utilisé n'est normalement mis à jour qu'une fois par jour. Mais si vous pouvez l'utiliser, c'est super rapide.

Mais avec find, vous pouvez rechercher la taille du fichier, l'âge du fichier et d'autres choses, qui ne sont pas consultables par Locate.

Si vous savez chercher, vous pouvez utiliser le chemin pour délimiter l'étendue de la recherche:

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

rechercherait uniquement des fichiers de 2 à 10 M, âgés de 1 an maximum dans / certains / chemin.

Les programmes, disponibles dans le chemin peuvent être recherchés par quels fichiers d'aide, de lib et de configuration avec whereis. Exemples:

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

7

Utilisation locate

La raison en est qu'il locateutilise une base de données de tous les répertoires et fichiers existants qui ont déjà été construits comme vous l'aviez imaginé!
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

À un intervalle défini (et modifiable), un travail s'exécute analyse le système de fichiers, puis crée une base de données avec lui. C'est alors cette base de données (locatedb), avec ses index appropriés, contre laquelle la locatecommande va au lieu de parcourir votre disque dur à ce stade.

L'avantage est donc qu'il est très rapide par rapport à une analyse de disque dur. L'inconvénient est que la base de données de localisation (locatedb) n'est pas «active» et ne peut donc être utilisée que pour les fichiers qui existaient «au moment de» la dernière analyse.

Pour mettre à jour locatedb maintenant exécutez updatedb(ou sudo updatedbsi nécessaire)

btw je viens de courir sudo updatedblocalement et cela a pris 3 1/2 secondes! J'ai 31 000 fichiers.


1

Comme d'autres l'ont souligné, la localisation peut être un meilleur outil pour un chercheur plus simple.

Cependant, pour les recherches plus complexes, vous êtes probablement coincé avec find.

Une façon d'accélérer la recherche consiste à restreindre le répertoire dans lequel se trouvent vos fichiers au lieu de rechercher tout le répertoire racine.


0

pour une seule opération de recherche; Je n'ai trouvé aucune accélération; sauf si vous essayez d'affiner la recherche à l'aide des findoptions.

Pourtant; si vous souhaitez effectuer plusieurs findopérations sur le même ensemble de fichiers ; J'ai obtenu une accélération significative en remplissant un fichier temporaire avec tous les noms de fichiers et en l'utilisant grep. Bien entendu, cela ne prend pas en compte les fichiers ajoutés ou supprimés.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.