Quel est l'équivalent de la commande updatedb de Linux pour Mac?

234

Si je veux utiliser la locatecommande sur une machine Linux, je lance généralement d' sudo updatedbabord pour mettre à jour la base de données. Je peux exécuter la locatecommande sur OS X 10.5 mais je ne le trouve pas updatedb. Quelle est la mise à jour correspondante pour le mac?

Thierry Lam
la source
Bien upatedb et localiser sont de bonnes choses, mais elles nécessitent l’exécution régulière de updatedb. Je pense donc qu'au lieu de configurer localiser / mis à jourb, il serait peut-être préférable de se familiariser avec la découverte (la plus puissante).
amo-ej1
9
Bien que find soit utile pour beaucoup de choses, il faut passer par le système de fichiers à chaque fois. Si vous pouvez réduire les endroits où vous regardez, c'est bien. L’avantage de la localisation est de conserver sa propre base de données et de ne pas avoir à chercher à chaque fois. Ceci est particulièrement important avec les systèmes de fichiers volumineux et / ou distants. Je pense que chacun a sa place.
KeithB
1
Lorsqu'il est exécuté pour la première fois locatesur une boîte OS X, il vous est demandé de l'exécuter sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist.
Török Gábor
12
En fonction de vos besoins locate, il peut être plus pratique d’utiliser l’interface de ligne de commande pour Spotlight mdfind, car la base de données Spotlight est presque toujours à jour et offre beaucoup plus de fonctionnalités que de rechercher. man mdfind
Paul R

Réponses:

327

C'est locate.updatedbsur Mac.

sudo /usr/libexec/locate.updatedb

Pour plus d'informations, voir la page de manuel Locate.updatedb .

John T
la source
9
Cette manpage indique également: Elle est généralement exécutée une fois par semaine par le travail /System/Library/LaunchDaemons/com.apple.locate.plist. (Et en man locatedit un à propos de ce script: /usr/libexec/locate.updatedb Script pour mettre à jour la base de données de localisation )
Arjan
5
@Arjan: Il devrait être lancé une fois par semaine, mais par défaut, il est désactivé et il est 3h le dimanche (ou quelque chose de similaire), ce qui n'est pas vraiment utile :)
Studer
Sur Linux, j’ai l'habitude de lancer sudo ionice -c3 updatedbce qui indique updatedbde bien partager le contrôleur i / o (io sympa) mais je ne pense pas que cette commande soit disponible sur mac. Je manque également d’avoir le -rdrapeau d’expression régulière qui peut être utilisé avec la localisation GNU, bien que je ne suis pas sûr de vouloir utiliser homebrew et d’installer la localisation GNU mentionnée par @Grogs
cwd
3
Exemple d'alternative macosx "localiser (-r)" et "updatedb" utilisant Spotlight ("-i" facultatif, bien sûr): mdfind -name "mp4" | egrep -i "^ / Utilisateurs. * Téléchargements /.* Stuff"
michael
De plus, si vous ne trouvez pas les fichiers que vous espérez voir, notez cette mise en garde pertinente dans la section BUGS de la page de manuel : The locate database is typically built by user ''nobody'' and the locate.updatedb(8) utility skips directories which are not readable for user ''nobody'', group ''nobody'', or world. For example, if your HOME directory is not world-readable, none of your files are in the database
Ashutosh Jindal
85

Vous pouvez faire sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbpour rendre la updatedbcommande disponible.

Igor Vigasin
la source
Heh, je viens de poster cela comme un commentaire .. Puis vu que vous avez dit cela. Je pense que c'est un joli petit mod à faire. :)
James T Snell
3
ou alias dans votre .bash_profile
Jim Johnson
19

Personnellement, je viens d'installer findutils (utilisez MacPorts ou Homebrew).

Ensuite, vous devez localiser et mettre à jour GNU.

updatedb ne fonctionnera pas sans sudo.

Personnellement, je préfère avoir un utilisateur par utilisateur. si vous en avez l'habitude, d'autres utilisateurs connaîtront les noms / emplacements de tous vos fichiers.

J'ai un travail cron à exécuter:

updatedb --localpaths='/Users/grogs' --output='/Users/grogs/tmp/locatedb'

Et dans mon .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"

Grogs
la source
3
L'installation de findutils sur OS X Mavericks m'a donné une gupdatedbcommande, pas une updatedb. Malheureusement, cette commande m'a donné une erreur décrite ici (où votre réponse SO est référencée). En fin de compte, j'ai opté updatedbpour LC_ALL=’C’ sudo updatedbune solution de contournement, mais je ne sais pas s'il s'agit d'une solution à long terme.
David Rivers
2
Ajoutez /opt/local/libexec/gnubinau début de votre chemin si vous voulez que les noms d' installation coreutilset findutilsinstallés par macportssoient disponibles avec leurs noms d'origine (et non leurs gversions avec préfixe).
Ioannis Filippidis
2

Si vous exécutez localize sans mettre à jour la base de données au préalable, vous aurez une chance de voir la méthode recommandée par le système d'exploitation par sa sortie.

WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:

  sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
Tankman 六四
la source