Pregunta ¿Cuál es el equivalente del comando updatedb de Linux para Mac?


Si quiero usar el locate comando en una máquina Linux, normalmente ejecuto sudo updatedb primero para actualizar la base de datos. Puedo ejecutar el locate comando en OS X 10.5 pero no puedo encontrar updatedb. ¿Cuál es la actualización correspondiente de mac?


215


origen


Bien upatedb y locate son cosas buenas, pero requieren ejecutar updatedb regularmente (ya sea updatedb se ejecuta con regularidad y esto ralentiza su sistema en momentos inconvenientes, o encuentra referencias de programas de shows que ya no existen). Entonces, creo que en lugar de configurar locate / updatedb sería mejor familiarizarse con (el más poderoso) find. - amo-ej1
Si bien find es útil para muchas cosas, necesita pasar por el sistema de archivos cada vez. Si puede delimitar los lugares donde está buscando, está bien. La ventaja de locate es que mantiene su propia base de datos, por lo que no necesita buscar cada vez. Esto es especialmente importante con sistemas de archivos grandes y / o remotos. Creo que cada uno tiene su lugar. - KeithB
Cuando se ejecuta por primera vez locate en una caja OS X le dice que ejecute sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist. - Török Gábor
Dependiendo de lo que necesite usar locate para, puede que le resulte más conveniente utilizar la interfaz de línea de comandos para Spotlight, mdfind, ya que la base de datos de Spotlight está casi siempre actualizada y ofrece mucha más funcionalidad que la ubicación. man mdfind - Paul R


Respuestas:


Sus locate.updatedb en Mac.

sudo /usr/libexec/locate.updatedb

Para más información, vea el Página de manual de locate.updatedb.


305



Ese man la página también afirma: Por lo general, se ejecuta una vez por semana en el trabajo /System/Library/LaunchDaemons/com.apple.locate.plist. (Y man locate le dice a uno sobre ese guion: /usr/libexec/locate.updatedb Script para actualizar la base de datos locate) - Arjan
@Arjan: se debe ejecutar una vez a la semana, pero el valor predeterminado está deshabilitado y el momento en que se debe hacer es 3am los domingos (o algo similar), que no es realmente útil :) - Studer
En Linux generalmente corro sudo ionice -c3 updatedb que dice updatedb para compartir el controlador de E / S muy bien (io agradable), pero no creo que este comando esté disponible en mac. También extraño tener el -r bandera de expresión regular que se puede usar con la ubicación de GNU, aunque no estoy seguro de querer usar homebrew e instalar la ubicación de GNU mencionada por @Grogs - cwd
Ejemplo de alternativa de macosx a "locate (-r)" y "updatedb" que usa Spotlight ("-i" opcional por supuesto): mdfind -name "mp4" | egrep -i "^ / Users. * Descargas /.* Stuff" - michael
Además, si tú no lo hagas encuentre los archivos que espera, tenga en cuenta esta advertencia relevante de la sección BUGS de la página de manual: 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 puedes hacer sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb hacer el updatedb comando disponible.


79



Heh, acabo de publicar esto como un comentario ... Entonces vi que dijiste esto. Creo que este es un pequeño y agradable mod para hacer. :) - James T Snell
o alias en tu .bash_profile - Jim Johnson


Personalmente, acabo de instalar findutils (use MacPorts o Homebrew).

Luego tiene GNU locate y updatedb.

updatedb no funcionará sin sudo.

Personalmente, prefiero tener un usuario por ubicaciónb; si lo haces, otros usuarios sabrán los nombres / ubicaciones de todos tus archivos.

Tengo un trabajo cron para ejecutar:

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

Y en mi .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"


19



Instalar brebajes de instalación en OS X Mavericks me dio una gupdatedb comando, no un updatedb uno. Lamentablemente este comando me dio un error descrito aquí (donde se hace referencia a su respuesta SO). En última instancia, he aliased updatedb a LC_ALL=’C’ sudo updatedb como una solución alternativa, pero no sé si esta es una solución a largo plazo. - David Rivers
Añadir /opt/local/libexec/gnubin al comienzo de tu camino, si quieres coreutils y findutils instalado por macports estar disponible con sus nombres originales (y no su g-prefixed versions). - Ioannis Filippidis


Si ejecuta locate sin actualizar primero la base de datos, tiene la posibilidad de ver el camino recomendado por el sistema operativo.

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