4 votos

¿Existe una forma de utilizar el comando update para localizar archivos en OS X sin tener que ejecutar updatedb manualmente?

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?

5voto

Douglas Puntos 10417

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.

2voto

Oskar Puntos 1242

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.

2voto

Pryftan Puntos 121

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:

Ejemplo de archivo de usuario: com.pryftan.locate.plist

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

Instalar el archivo (donde '$' es el símbolo del sistema):

$ sudo cp com.pryftan.locate.plist /Library/LaunchDaemons
$ sudo launchctl load -w /Library/LaunchDaemons/com.pryftan.locate.plist

Notas adicionales

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.

0voto

Ridcully Puntos 8353

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.com

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.

Powered by:

X