¿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?

Thierry Lam
fuente
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 .

John T
fuente
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.

Igor Vigasin
fuente
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"

Grogs
fuente
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
Tankman 六四
fuente