Question Qu'est-ce que l'équivalent de la commande updatedb de Linux pour Mac?


Si je veux utiliser le locate commande sur une machine Linux, je cours habituellement sudo updatedb Tout d'abord pour mettre à jour la base de données. Je peux courir le locate commande sur OS X 10.5 mais je ne trouve pas updatedb. Quel est le updatedb correspondant pour le mac?


215
2018-02-16 15:23


origine


Eh bien, la mise à jour et la localisation sont de bonnes choses, mais elles nécessitent une exécution régulière de updatedb (soit updatedb s'exécute régulièrement et cela ralentit votre système à des moments inopportuns, soit la localisation des références aux fichiers qui ne sont plus là). Donc, je pense qu'au lieu de mettre en place localiser / updatedb, il serait peut-être préférable de se familiariser avec (la plus puissante) find. - amo-ej1
Bien que find soit utile pour beaucoup de choses, il doit passer par le système de fichiers à chaque fois. Si vous pouvez réduire les endroits que vous recherchez, ça va. L'avantage de la localisation est qu'elle conserve sa propre base de données et n'a donc pas besoin de 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
Lors de la première exécution locate sur une boîte OS X, il vous dit de courir sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist. - Török Gábor
Selon ce que vous devez utiliser locate car, vous pourriez trouver plus pratique d'utiliser l'interface de ligne de commande pour Spotlight, mdfind, puisque la base de données Spotlight est presque toujours à jour et offre beaucoup plus de fonctionnalités que la localisation. man mdfind - Paul R


Réponses:


Ses locate.updatedb sur Mac

sudo /usr/libexec/locate.updatedb

Pour plus d'informations, voir le Page de manuel de Locate.updatedb.


305
2018-02-16 15:27



Cette man La page revendique également: Il est généralement exécuté une fois par semaine par le travail /System/Library/LaunchDaemons/com.apple.locate.plist. (Et man locate en dit un sur ce script: /usr/libexec/locate.updatedb Script pour mettre à jour la base de données de localisation) - Arjan
@Arjan: Il devrait être lancé une fois par semaine, mais la valeur par défaut est désactivée et l'heure à laquelle il doit être fait est 3h le dimanche (ou quelque chose de similaire), ce qui n'est pas vraiment utile :) - Studer
Sur Linux, je cours habituellement sudo ionice -c3 updatedb qui raconte updatedb pour partager le contrôleur i / o bien (io nice) mais je ne pense pas que cette commande soit disponible sur mac. J'ai aussi manqué d'avoir le -r drapeau d'expression régulière qui peut être utilisé avec la localisation GNU, même si je ne suis pas sûr de vouloir utiliser homebrew et installer la localisation GNU mentionnée par @Grogs - cwd
Exemple d'alternative macosx à "Locate (-r)" et "updatedb" qui utilise Spotlight ("-i" facultatif bien sûr): mdfind -name "mp4" | egrep -i "^ / Users. * Downloads /.* Stuff" - michael
Aussi, si vous ne pas trouver les fichiers que vous attendez à, notez cette mise en garde pertinente de 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


Tu peux faire sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb pour faire le updatedb commande disponible.


80
2017-10-18 22:29



Heh, je viens juste de poster ceci comme un commentaire .. Alors tu as vu ça. Je pense que c'est un joli petit mod à faire. :) - James T Snell
ou l'alias dans votre fichier .bash_profile - Jim Johnson


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

Ensuite, vous avez GNU localiser et mis à jourb.

updatedb ne fonctionnera pas sans sudo.

Personnellement, je préfère avoir un utilisateur par utilisateur situé; Si vous avez d'autres utilisateurs, vous connaîtrez les noms / emplacements de tous vos fichiers.

J'ai un job cron à exécuter:

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

Et dans mon fichier .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"


19
2017-12-04 02:27



L’installation de findutils sur OS X Mavericks m’a donné gupdatedb commande, pas un updatedb un. Malheureusement cette commande m'a donné une erreur décrit ici (où votre réponse SO est référencée). En fin de compte, j'ai aliasé updatedb à LC_ALL=’C’ sudo updatedb comme solution de contournement, mais je ne sais pas s'il s'agit d'une solution à long terme. - David Rivers
Ajouter /opt/local/libexec/gnubin au début de votre chemin, si vous voulez le coreutils et findutils installé par macports être disponible avec leurs noms d'origine (et non leur g-prefixed versions). - Ioannis Filippidis


Si vous lancez localiser sans d'abord mettre à jour la base de données, vous avez une chance de voir la manière 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

2
2017-08-15 09:09