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


234

Si quiero usar el locatecomando en una máquina Linux, generalmente ejecuto sudo updatedbprimero para actualizar la base de datos. Puedo ejecutar el locatecomando en OS X 10.5 pero no puedo encontrarlo updatedb. ¿Cuál es la actualización actualizada correspondiente para Mac?


Bien, upatedb y localizar son cosas buenas, pero requieren ejecutar updatedb regularmente (ya sea updatedb se ejecuta regularmente y esto ralentiza su sistema en momentos inconvenientes, o localizar muestra referencias a archivos que ya no están allí). Así que creo que en lugar de configurar localizar / actualizadob quizás sería mejor familiarizarse con (el mucho más poderoso) encontrar.
amo-ej1

99
Si bien find es útil para muchas cosas, debe pasar por el sistema de archivos cada vez. Si puede reducir los lugares donde está buscando, está bien. La ventaja de localizar 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

1
Cuando se ejecuta locatepor primera vez en un cuadro de OS X, le indica que ejecute sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist.
Török Gábor

12
Dependiendo de lo que necesite usar locate, puede que le resulte más conveniente usar la interfaz de línea de comando para Spotlight mdfind, ya que la base de datos de Spotlight está casi siempre actualizada y ofrece mucha más funcionalidad que localizar. man mdfind
Paul R

Respuestas:


327

Está locate.updatedben Mac.

sudo /usr/libexec/locate.updatedb

Para obtener más información, consulte la página del comando man localizar.updatedb .


99
Esa manpágina también afirma: Por lo general, el trabajo /System/Library/LaunchDaemons/com.apple.locate.plist lo ejecuta una vez a la semana. (Y man locatele dice a uno sobre ese script: /usr/libexec/locate.updatedb Script para actualizar la base de datos de localización )
Arjan

55
@Arjan: debe ejecutarse una vez a la semana, pero el valor predeterminado es deshabilitado y la hora en que debe hacerse es a las 3 a.m. los domingos (o algo similar), lo que no es realmente útil :)
Studer

En Linux, generalmente ejecuto lo sudo ionice -c3 updatedbque me dice updatedbque comparta bien el controlador de E / S (io nice), pero no creo que este comando esté disponible en Mac. También extraño tener la -rbandera de expresiones regulares que se pueden utilizar con la GNU localizar, aunque no estoy seguro de que quiera utilizar e instalar el homebrew GNU locate mencionado por @Grogs
cwd

3
Ejemplo de alternativa de macosx a "localizar (-r)" y "updatedb" que utiliza Spotlight ("-i" opcional, por supuesto): mdfind -name "mp4" | egrep -i "^ / Users. * Downloads /.* Stuff"
michael

Además, si no encuentra los archivos que espera, tenga en cuenta esta advertencia relevante de la sección ERRORES 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

85

Puede hacer sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbque el updatedbcomando esté disponible.


Heh, acabo de publicar esto como un comentario ... Luego te vi decir esto. Creo que este es un pequeño mod agradable para hacer. :)
James T Snell

3
o alias en tu .bash_profile
Jim Johnson

19

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

Entonces tienes GNU localizar y actualizadob.

updatedb no funcionará sin sudo.

Sin embargo, personalmente prefiero tener una ubicación por usuariob; si sudo otros usuarios sabrán los nombres / ubicaciones de todos sus 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"


3
La instalación de brew findutils en OS X Mavericks me dio un gupdatedbcomando, no updatedbuno. Lamentablemente, este comando me dio un error descrito aquí (donde se hace referencia a su respuesta SO). En última instancia He alias updatedbque LC_ALL=’C’ sudo updatedbcomo una solución, pero no sé si esto es una solución a largo plazo.
David Rivers

2
Agregue /opt/local/libexec/gnubinal comienzo de su ruta, si desea que coreutilse findutilsinstalado por macportsesté disponible con sus nombres originales (y no sus gversiones prefijadas).
Ioannis Filippidis

2

Si ejecuta localizar sin actualizar primero la base de datos, tiene la oportunidad de ver la forma recomendada del sistema operativo por su salida.

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.