El comando locate de GNU

El comando locate sirve para encontrar archivos por el nombre en nuestro sistema GNU/Linux

El comando locate de GNU creado pro Miloslav Trmac, forma parte del paquete «GNU Find Utilities«, un conjunto de herramientas que trabajan junto con otros programas para ofrecernos herramientas muy útiles a la hora de buscar archivos en nuestros sistemas GNU/Linux.

«GNU Find Utilities» incluyen programas como:

  • find – busca archivos en una jerarquía de directorios (del que ya escribí un artículo)
  • locate – enumera los archivos en que se encuentran en una(s) base(s) de datos que coincidan con un patrón
  • updatedb – actualizar una base de datos de nombres de archivos
  • xargs – construye y ejecuta líneas de comando desde la entrada estándar

En esta ocasión vamos a ver cómo usar locate para buscar archivos en nuestro equipo, cuyos nombres están indexados en una base de datos.

El comando locate es el comando más rápido y la manera más rápida de buscar por el nombre un archivo en nuestro sistema GNU/Linux.

Si ya tenemos instalado el programa en nuestro sistema, ya podremos empezar a usarlo. El comando locate busca un patrón que le pasamos al ejecutarlo.

Ese patrón es el nombre (o parte del nombre) de un archivo y el comando lo que hace es buscarlo en una base de datos que mantiene y muestra los resultados por pantalla, de manera predeterminada un resultado por línea aunque eso se puede cambiar como veremos.

La base de datos en la que busca el comando se actualiza de manera diaria mediante una tarea «cron» que se instala en nuestro sistema al instalar el programa.

También podemos actualizar nosotros de manera manual la base de datos en cualquier momento ejecutando el comando updatedb Y dependiendo de nuestro sistema, esa actualización puede llevar más o menos tiempo.

Esa base de datos está localizada en la ruta /var/lib/mlocate/mlocate.db aunque podemos establecer otras rutas.

Pero vamos ya a ver cómo se usa el comando. El uso básico del comando es invocando el comando junto con un patrón de búsqueda. Imaginemos que queremos buscar en nuestro equipo un archivo que se llama hola.txt. Para ello ejecutaríamos:

locate hola

Nos mostrará todos los archivos que contengan la cadena hola en su nombre, ya que sin más parámetros busca el patrón no de manera estricta, si no como si fuera un comodín.

Así encontrará por ejemplo:

locate hola
/home/victorhck/Documentos/hola_mundo.html
/home/victorhck/Documentos/hola2.md
/home/victorhck/hola_mundo.txt
/home/victorhck/hola.txt

Eso sí, de manera predeterminada locate tiene en cuenta las mayúsculas y minúsculas, por lo que con la búsqueda anterior no mostrará por ejemplo ningún archivo HOLA.txt.

Si queremos que no tenga en cuenta mayúsculas y minúsculas deberemos ejecutar el comando con la opción -i

locate -i hola
/home/victorhck/Documentos/hola_mundo.html
/home/victorhck/Documentos/hola2.md
/home/victorhck/hola_mundo.txt
/home/victorhck/hola.txt
/home/victorhck/HOLA.txt

He dicho antes que el comando busca los nombres de archivo en una base de datos que se actualiza una vez al día o de manera manual.

Es decir que si creamos un nuevo archivo, si queremos que lo pueda encontrar, antes deberemos actualizar la base de datos como hemos visto antes.

Y quizás también se han borrado archivos desde que se actualizó la base de datos, si no queremos actualizarla y queremos que nos muestre los archivos que existen actualmente a la hora de ejecutarse el comando locate deberemos incluir la opción -e

locate -e prueba

El comando nos muestra cada coincidencia del patrón buscado en una línea, pero podemos hacer que nos devuelva todos los resultados seguidos mediante la opción -0

O podemos hacer que nos devuelva únicamente el valor del número de coincidencias encontradas con la opción -c

Si queremos buscar un archivo llamado hola.txt y no queremos que nos muestre otras opciones que no sean los archivos que se llaman exactamente como lo que buscamos, deberemos añadir la opción -b y añadir un caracter comodín al nombre para que así nos busque exactamente hola.txt y no *hola.txt*

locate -b '\hola.txt'
/home/victorhck/hola.txt

Lo mismo si queremos buscar todos los archivos que se llamen prueba ya sea mayúscula o minúscula y tenga cualquier extensión podremos hacerlo mediante:

locate -ib 'prueba.*'
/home/victorhck/prueba.txt
/home/victorhck/prueba.html
/home/victorhck/Prueba.html

Podemos obtener las estadísticas de la base de datos indexada que usa el comando locate ejecutando el comando con la opción -S

locate -S
Base de datos /var/lib/mlocate/mlocate.db:     
   95.284 directorios
        1.378.246 archivos
        100.906.228 bytes en los nombres de archivo
        39.657.601 bytes utilizados para almacenar la base de datos

Podemos especificar varios patrones de búsqueda junto con el comando locate, no solo uno. El comando mostrará todos los archivos que cumplen uno u otro patrón de búsqueda.

En el siguiente ejemplo vamos a hacer que el comando nos muestre cuantos archivos coinciden con el patrón «mi_» o con el patrón «prueba», en mi caso:

locate -c mi_ prueba
127

Esto es muy distinto si incluimos la opción -A. Con esta opción el comando nos devuelve solo los archivos encontrados que cumplen ambos patrones de búsqueda. Es decir que tienen tanto «mi_» como «prueba». Veamos la diferencia:

locate -Ac mi_ prueba
4

Y estas son algunas de las opciones que tiene el comando locate de GNU a la hora de realizar búsquedas de archivos en tu equipo. Para una vista más detallada a otras opciones te recomiendo usar la página man del comando.

Espero que esta pequeña guía te haya resultado útil e incorpores el comando locate al arsenal de comandos que ya usas y manejas en la terminal de tu sistema GNU/Linux.

Si conocías el comando y quieres compartir algún truco, o si no conocías alguna opción o ni siquiera el comando, puedes usar los comentarios del blog para dejar tu comentario.

Un comentario sobre “El comando locate de GNU

  1. muy buena me fue util, me intereza saber como puedo hacer esto que dices,
    Esa base de datos está localizada en la ruta /var/lib/mlocate/mlocate.db aunque podemos establecer otras rutas.
    quiero cambiar la ruta de catfish porque no me actualiza el indice, me da error, o como actualizo ese mlocatedb gracias.

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.