Existen los comandos findy locatepara buscar archivos en el disco.
Sé que findprocesa recursivamente todos los subdirectorios necesarios para buscar archivos y, por lo tanto, es lento pero está actualizado, mientras que locateusa una base de datos que se actualiza de vez en cuando (¿cuándo exactamente?) Para mostrar rápidamente resultados que pueden estar desactualizados.
¿Hay otras diferencias? ¿En qué situaciones uno preferiría el uno o el otro? ¿Y cuándo locatese actualiza la base de datos habitualmente?

anacronestá. No sé si está instalado de forma predeterminada en los sistemas / servidores de escritorio, pero está en los portátiles. Se ejecuta al arrancar y ve si algún trabajo cron debería haberse ejecutado mientras el sistema estaba apagado y lo ejecuta. Es realmente útil, pero puede causar algunos problemas si tiene trabajos programados lejos de la medianoche. Eso puede hacer que el trabajo se ejecute al arrancar y luego nuevamente cuando llegue el momento, posiblemente mucho menos de 24 horas después (para un trabajo diario)Respuestas:
locatees realmente solo bueno para encontrar archivos y mostrarlos a los humanos. Puede hacer algunas cosas con él, pero no confiaría lo suficiente como para analizarlo y, como usted dice, es imposible garantizar el estado de la base de datos interna, ¡más aún porque solo está programada para ejecutarse/etc/cron.daily/mlocate, una vez al día!findes en vivo. Filtra, excluye, ejecuta. Es adecuado para analizar. Puede generar rutas relativas. Puede generar rutas completas. Puede hacer cosas basadas en atributos, no solo en nombres.locateciertamente tiene un lugar en mi caja de herramientas, pero generalmente está justo en la parte inferior como un último esfuerzo para encontrar algo. Es más fácil quefindtambién.fuente
locatemucho más rápido si quiero buscar en todo mi sistema de archivos. Y puede actualizar manualmente la base de datos usandoupdatedbantes de usarla.sudo updatedb)? ¿Y existe la posibilidad de ver la antigüedad de la base de datos?grep run-parts /etc/crontabVerá que estos se están administrando a través deanacron(lo que veráman anacrones más resistente a los sistemas que no están en todo momento). Por lo que puedo ver, debería ejecutarlo en el arranque si se pierde el tiempo cron original.-exec command {} \;ejecutar un comando en cada archivo encontrado. Me gusta usar ellocate -bque restringe la localización para encontrar archivos que coincidan con el componente final del nombre, sin el resto de la ruta. A menudo lo intento primero porque es muy rápido. Además, puede ejecutar ensudo updatedbcualquier momento que desee actualizar la base de datos de localización.ls -R | grep 'file_name.txt'Por mucho que me guste Oli (¡lo cual es mucho!) No estoy de acuerdo con él en el
findcomando. No me gustafindel comando lleva más de tres minutosTome por ejemplo este simple comando:
Se tarda más de tres minutos para
findbuscar todo a partir de/. Por defecto, aparecen montones de mensajes de error y debe buscarlos para encontrar lo que está buscando. Aún así, es mejor quegrepbuscar en todo el disco una cadena que demore 53 horas : `grep` todos los archivos para una cadena lleva mucho tiempoSé que puedo jugar con los parámetros del comando find para que funcione mejor, pero el punto aquí es la cantidad de tiempo que tarda en ejecutarse.
locateel comando lleva menos de un segundoAhora usemos
locate:¡El comando de localización toma menos de un segundo!
updatedbsolo se ejecuta una vez al día de forma predeterminadaEs cierto que el
updatedbcomando que actualiza la base de datos de localización solo se ejecuta una vez al día de forma predeterminada. Puede ejecutarlo manualmente antes de buscar los archivos que acaba de agregar usando:Aunque esto tomará 3 segundos, es pequeño en comparación con
findlos más de 3 minutos del comando.He actualizado mi
sudo crontab -epara incluir la línea en la parte inferior:Ahora
updatedbse ejecuta cada cinco minutos y lalocatebase de datos de comandos está casi siempre actualizada.Pero no hay atributos?
Puede canalizar la
locatesalida a otros comandos. Si, por ejemplo, desea los atributos de archivo que puede usar:Resumen
Publiqué esta respuesta para mostrar la velocidad y facilidad de uso de
locate. Traté de abordar algunas de las deficiencias de comando señaladas por otros.El
findcomando necesita atravesar toda la estructura del directorio para encontrar archivos. Ellocatecomando tiene su propia base de datos que le da la velocidad del rayo en comparación.fuente
locate / display-auto-brightnessdura 17 segundos y también muestra todos los directorios y archivos en todos los discos.--regexera necesario porque había demasiados resultados devueltos con mi cadena de búsqueda. Encontraré dos nuevos ejemplos para buscar y localizar y actualizar mi respuesta en unos minutos.findcomando significa "imprimir los nombres de todos los archivos en los directorios/ydisplay-auto-brightness". Creo que querías usarfind / -name display-auto-brightness, pero incluso eso imprime muchos errores basura "Permiso denegado".