Il y a les commandes find
et locate
pour rechercher des fichiers sur le disque.
Je sais que find
traite récursivement tous les sous-répertoires nécessaires pour rechercher des fichiers et est donc lent mais à jour, alors qu'il locate
utilise une base de données qui est mise à jour de temps en temps (quand exactement?) Pour afficher rapidement des résultats qui pourraient être obsolètes cependant.
Y-a-t'il d'autres différences? Dans quelles situations préférerait-on l'un ou l'autre? Et quand la locate
base de données est-elle mise à jour habituellement?
anacron
. Je ne sais pas s'il est installé par défaut sur les systèmes / serveurs de bureau, mais c'est sur les ordinateurs portables. Il s'exécute au démarrage et voit si des tâches cron auraient dû s'exécuter alors que le système était hors tension et les exécute. C'est vraiment utile, mais cela peut causer des problèmes si vous avez des tâches planifiées loin de minuit. Cela peut entraîner l'exécution du travail au démarrage, puis à nouveau lorsque le moment est venu - peut-être beaucoup moins de 24 heures plus tard (pour un travail quotidien.)Réponses:
locate
est vraiment seulement bon pour trouver des fichiers et les afficher aux humains. Vous pouvez faire quelques choses avec, mais je ne lui ferais pas assez confiance pour analyser et - comme vous le dites - il est impossible de garantir l'état de la base de données interne, d'autant plus qu'elle ne doit s'exécuter/etc/cron.daily/mlocate
qu'une fois par jour!find
est en direct. Il filtre, exclut, exécute. Il convient pour l'analyse. Il peut générer des chemins relatifs. Il peut sortir des chemins complets. Il peut faire des choses basées sur des attributs, pas seulement sur des noms.locate
a certainement une place dans ma boîte à outils, mais c'est généralement juste en bas comme un dernier effort pour trouver quelque chose. C'est plus facile quefind
trop.la source
locate
c'est beaucoup plus rapide si je veux rechercher tout mon système de fichiers. Et vous pouvez mettre à jour manuellement la base de donnéesupdatedb
avant de l'utiliser.sudo updatedb
)? Et est-il possible de voir l'âge de la base de données?grep run-parts /etc/crontab
Vous verrez que ceux-ci sont gérés par le biaisanacron
(ce que vous verrez à traversman anacron
est plus résistant aux systèmes qui ne sont pas tout le temps). D'après ce que je peux voir, il devrait l'exécuter au démarrage à la place si vous manquez l'heure de cron d'origine.-exec command {} \;
pour exécuter une commande sur chaque fichier trouvé. J'aime utiliserlocate -b
ce qui limite la localisation à la recherche de fichiers correspondant au dernier composant du nom - sans le reste du chemin. J'essaye souvent ça d'abord parce que c'est tellement rapide. Vous pouvez également exécuter àsudo updatedb
tout moment pour actualiser la base de données de localisation.ls -R | grep 'file_name.txt'
Autant j'aime Oli (ce qui est beaucoup!) Je suis en désaccord avec lui sur la
find
commande. Je n'aime pas ça.find
la commande prend plus de trois minutesPrenons par exemple cette simple commande:
Il faut plus de trois minutes pour
find
tout rechercher à partir de/
. Par défaut, des tonnes de messages d'erreur apparaissent et vous devez les parcourir pour trouver ce que vous recherchez. Il vaut quand même mieux quegrep
de rechercher dans le lecteur entier une chaîne qui prend 53 heures : `grep`s tous les fichiers pour une chaîne prend beaucoup de tempsJe sais que je peux jouer avec les paramètres de la commande find pour la faire fonctionner mieux, mais le point ici est le temps qu'il faut pour s'exécuter.
locate
la commande prend moins d'une secondeUtilisons maintenant
locate
:La commande de localisation prend moins d'une seconde!
updatedb
ne fonctionne qu'une fois par jour par défautIl est vrai que la
updatedb
commande qui met à jour la base de données de localisation n'est exécutée qu'une fois par jour par défaut. Vous pouvez l'exécuter manuellement avant de rechercher les fichiers que vous venez d'ajouter en utilisant:Bien que cela prenne 3 secondes, c'est petit par rapport aux
find
3+ minutes de la commande.J'ai mis
sudo crontab -e
à jour mon pour inclure la ligne en bas:Maintenant, toutes les cinq minutes
updatedb
sont exécutées et lalocate
base de données de commandes est presque toujours à jour.Mais il n'y a pas d'attributs?
Vous pouvez diriger la
locate
sortie vers d'autres commandes. Si, par exemple, vous voulez les attributs de fichier, vous pouvez utiliser:Sommaire
J'ai posté cette réponse pour montrer la vitesse et la facilité d'utilisation de
locate
. J'ai essayé de corriger certains des défauts de commande signalés par d'autres.La
find
commande doit parcourir toute la structure de répertoires pour rechercher des fichiers. Lalocate
commande possède sa propre base de données qui lui donne une vitesse de l'éclair en comparaison.la source
locate / display-auto-brightness
prend 17 secondes et affiche également chaque répertoire et fichier sur tous les disques.--regex
était nécessaire car trop de résultats ont été renvoyés avec ma chaîne de recherche. Je vais trouver deux nouveaux exemples pour trouver et localiser et mettre à jour ma réponse dans quelques minutes.find
commande signifie "imprimer les noms de fichiers de tous les fichiers dans les répertoires/
etdisplay-auto-brightness
." Je pense que vous vouliez l'utiliserfind / -name display-auto-brightness
, mais même cela imprime beaucoup d'erreurs indésirables "Autorisation refusée".