Existen los comandos find
y locate
para buscar archivos en el disco.
Sé que find
procesa recursivamente todos los subdirectorios necesarios para buscar archivos y, por lo tanto, es lento pero está actualizado, mientras que locate
usa 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 locate
se actualiza la base de datos habitualmente?
anacron
está. 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:
locate
es 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!find
es 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.locate
ciertamente 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 quefind
también.fuente
locate
mucho más rápido si quiero buscar en todo mi sistema de archivos. Y puede actualizar manualmente la base de datos usandoupdatedb
antes de usarla.sudo updatedb
)? ¿Y existe la posibilidad de ver la antigüedad de la base de datos?grep run-parts /etc/crontab
Verá que estos se están administrando a través deanacron
(lo que veráman anacron
es 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 -b
que 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 updatedb
cualquier 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
find
comando. No me gustafind
el comando lleva más de tres minutosTome por ejemplo este simple comando:
Se tarda más de tres minutos para
find
buscar 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 quegrep
buscar 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.
locate
el comando lleva menos de un segundoAhora usemos
locate
:¡El comando de localización toma menos de un segundo!
updatedb
solo se ejecuta una vez al día de forma predeterminadaEs cierto que el
updatedb
comando 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
find
los más de 3 minutos del comando.He actualizado mi
sudo crontab -e
para incluir la línea en la parte inferior:Ahora
updatedb
se ejecuta cada cinco minutos y lalocate
base de datos de comandos está casi siempre actualizada.Pero no hay atributos?
Puede canalizar la
locate
salida 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
find
comando necesita atravesar toda la estructura del directorio para encontrar archivos. Ellocate
comando tiene su propia base de datos que le da la velocidad del rayo en comparación.fuente
locate / display-auto-brightness
dura 17 segundos y también muestra todos los directorios y archivos en todos los discos.--regex
era 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.find
comando 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".