Estoy considerando usar un alias para locate, ya que me parece realmente incómodo tener que ejecutar updatedb tan a menudo en mac.
¿Tienes alguna idea o solución para esto?
Estoy considerando usar un alias para locate, ya que me parece realmente incómodo tener que ejecutar updatedb tan a menudo en mac.
¿Tienes alguna idea o solución para esto?
Si quieres localizar para actualizar con más frecuencia, tienes que modificar el /System/Library/LaunchDaemons/com.apple.locate.plist
archivo.
En concreto, quiere encontrar el <key>StartCalendarInterval</key>
y modifícalo según tus especificaciones. Por defecto, locate está configurado para actualizarse a las 3:15 de la madrugada cada sábado (siendo el domingo el primer día que empieza con 0).
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>6</integer>
</dict>
Esto funciona como cron, así que puedes especificar un asterisco si quieres, por ejemplo, ejecutarlo todos los días. Sólo tiene que cambiar el 6
a y *
y funcionará a las 3:15 todos los días.
Una forma más sencilla de hacerlo si quieres que se ejecute en un intervalo determinado, por ejemplo, cada 3 horas, puedes utilizar el botón StartInterval <integer>
directiva. Así, para que su tarea se ejecute cada tres horas, inserte la siguiente directiva en el archivo plist:
<key StartInterval</key>
<integer>108000</integer>
El número entero es el número de segundos. Así, 60 segundos en un minuto, 60 minutos en una hora, etc.
No te olvides de quitar el StartCalendarInterval
directiva.
Por último, pero definitivamente no menos importante... haga una copia de seguridad de su archivo .plist antes de modificarlo. De esta manera, si usted manguera de cosas, usted tiene una buena configuración de recurrir a.
Nota: Para que estos cambios funcionen en OS X El Capitan, es necesario desactivar la Protección de Integridad del Sistema (SIP) de OS X. Sólo puede hacerlo utilizando csrutil
en el modo de recuperación del sistema.
Arrancar el Mac en Recuperación del Sistema manteniendo pulsado Command + R .
Utilizando el Terminal, introduzca csrutil disable
Debería ver lo siguiente: Successfully disabled System Integrity Protection. Please restart machine for changes to take effect.
Reinicia.
locate
debería actualizarse según su programa.
Descargo de responsabilidad: No es un procedimiento recomendado. Si bien esta respuesta aborda técnicamente la pregunta, no cubre el "¿Por qué es necesario alterar el calendario actualizadob?" pregunta.
Localizar siempre consulta una base de datos que, por defecto, está desfasada, se actualiza periódicamente o no se ha creado.
Puedes cargar la tarea semanal para regenerar esto con un comando:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
En OS X, sería mejor utilizar mdfind
que utiliza la base de datos spotlight y está diseñado para actualizarse continuamente y proporcionar actualizaciones en tiempo real al índice.
Estos vivos mdfind
Las consultas muestran resultados rápidos cuando cualquier otro proceso crea un archivo que coincide con sus criterios de búsqueda: el resultado llegará casi instantáneamente.
Cambiar el alias para usar mdfind
en lugar de locate
le permite sortear las limitaciones de diseño de locate
y el find
que utiliza para rastrear el sistema de archivos.
No es necesario que desactive el SIP para ello; en su lugar, puede utilizar la opción /Library
directorio para esto. Tuve este mismo problema porque no tengo mi MacBook Pro en la noche y también estoy acostumbrado a otros sistemas donde tiene cronjob diario que hace esto. Sin embargo, es posible configurarlo para que lo haga bajo demanda o incluso una vez que el ordenador arranque: y no, no es necesario desactivar el SIP (a pesar de lo que sugiere otra respuesta). Así es como lo hice; si hay algo que pueda ser mejorado estoy más que feliz de escucharlo y ciertamente en mi estado de cansancio podría haber escrito algo mal o incluso olvidado un paso o punto importante. Corregiré cualquier cosa que se me señale.
El archivo estándar que hace esto y que Apple instala está en /System/Library/LaunchDaemons/com.apple.locate.plist
pero puede instalar el suyo propio en /Library/LaunchDaemons
. Lo que hice fue copiar primero el que viene por defecto de Apple a un directorio temporal, hice algunas modificaciones y luego lo moví al segundo directorio: luego actualicé el sistema (ver más abajo) para que se ejecute al iniciar (y creo que también cuando lo cargas en ese mismo momento). Parece que hay un "estándar" de alguna forma para el nombre del archivo, pero tomé el nombre de mi sistema y lo usé como parte del nombre. Aquí voy a utilizar mi mango en su lugar:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.pryftan.locate</string>
<key>RunAtLoad</key>
<true/>
<key>LaunchOnlyOnce</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/locate.updatedb</string>
</array>
<key>LowPriorityIO</key>
<true/>
<key>Nice</key>
<integer>5</integer>
<key>KeepAlive</key>
<dict>
<key>PathState</key>
<dict>
<key>/var/db/locate.database</key>
<false/>
</dict>
</dict>
<key>AbandonProcessGroup</key>
<true/>
</dict>
</plist>
$ sudo cp com.pryftan.locate.plist /Library/LaunchDaemons
$ sudo launchctl load -w /Library/LaunchDaemons/com.pryftan.locate.plist
Observe que el nombre del archivo (menos el .plist
parte) está en el propio archivo; el nombre que se le dé al archivo también debería actualizarse en él.
Después de instalar el archivo y cargarlo, el sistema debería iniciar inmediatamente el /usr/libexec/locate.updatedb
comando. Hace uso de /tmp para algunos archivos temporales y después de que haya terminado, por supuesto, elimina esos archivos. Si miras el archivo de la base de datos, verás que ha sido actualizado (o modificado).
Tenga en cuenta la -w
al comando anterior no es estrictamente necesario: eso es sólo si hay una clave "Desactivado" en el archivo, pero como vi por primera vez la invocación del comando con esa opción lo mantuve allí incluso después de eliminar esa clave.
Si quieres actualizar la base de datos manualmente puedes ejecutar el comando directamente (o -por lo que se desprende de una prueba realizada hace un momento- puedes recargar usando el mismo comando launchctl load de arriba):
$ sudo /usr/libexec/locate.updatedb
Ah, y en un comentario a otra respuesta señalé cómo efectivamente muestra los directorios de los usuarios. En realidad, pensando en eso, lo más probable es que tenga que ver con los permisos; ciertamente ese es el caso en Linux. Esto tiene sentido por supuesto; no es una limitación del comando sino un mecanismo de seguridad y privacidad que forma parte del propio SO. Es decir que aunque la base de datos tenga todos los archivos el usuario no puede ver los archivos para los que no tiene permiso (directorios).
Una cosa más: Tuve un problema inicial con el formato del archivo de arriba, así que si hay un error por favor hágamelo saber y veré cómo arreglarlo (cuando revise los mensajes - tengo mucho que hacer ahora). Si hay algún error lo mismo. En cualquier caso sé que lo que tengo funciona así que mientras se haga todo como se ha explicado - y como he explicado (y pegado) bien debería ser lo que necesitas: si es que quieres que se actualice cada vez al arrancar. Si no es así puedes hacer como dice otra respuesta sólo que puedes poner el archivo en el directorio que anoté en lugar de modificar el propio archivo del sistema.
locate
La base de datos de la Comisión Europea se actualiza por defecto sólo semanalmente. Para cambiar su horario es necesario desactivar el SIP, como ya se ha explicado, lo que significa desactivar los mecanismos de seguridad puestos ahí para su protección. No es recomendable. También, locate
parece que sólo encuentra los archivos "públicos", es decir, no los archivos de tu directorio personal.
mdfind
sólo encontrará las cosas que encuentra una búsqueda en Spotlight. Por ejemplo, parece que no encuentra archivos dentro de paquetes de archivos. Y es entre incómodo, impreciso e inútil si sólo quieres encontrar basándote en los nombres de los archivos.
La última opción, aunque clásica, es utilizar el find
en la terminal. Tiene muchas opciones, así que mejor comprueba man find
. Pero el uso básico, tipo localización, es sencillo: find <root directory for search> -iname <filename_with_wildcards>
. Probablemente será lento (dependiendo de lo grande que sea la parte del árbol del sistema de archivos en la que estás buscando), pero te muestra el estado actual del sistema de archivos, tal y como lo ve el usuario actual. Así que, ejecútalo con sudo y buscarás en todos los archivos del sistema.
Y si quieres encontrar sin bajar al nivel de la Terminal, puedes probar el programa gratuito EasyFind de Devon Techonologies . Funciona bien.
AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.