Comando Linux Locate para principiantes (8 ejemplos)

Aunque find es sin duda una de las utilidades de línea de comandos más populares y potentes para la búsqueda de archivos en Linux, no es lo suficientemente rápido para situaciones en las que se necesitan resultados instantáneos. Si desea buscar un archivo en su sistema a través de la línea de comandos, y la velocidad es la máxima prioridad, entonces hay otro comando que puede utilizar: Locate.

En este tutorial, discutiremos el comando locate usando ejemplos fáciles de entender. Tenga en cuenta que todas las instrucciones/ejemplos mencionados aquí han sido probados en Ubuntu 16.04 LTS, y la versión de locate que hemos utilizado es 0.26.

Cómo usar el comando locate en Linux

El comando locate es muy fácil de usar. Todo lo que tienes que hacer es pasarle el nombre de archivo que quieres buscar.

locate 

Por ejemplo, si quiero buscar todos los nombres de archivo que tienen la cadena ‘dir2’ en ellos, entonces puedo hacerlo usando locate de la siguiente manera:

Nota: El comando ‘locate dir2’ (sin asteriscos) también servirá ya que locate reemplaza implícitamente el nombre que pasas (digamos NOMBRE) con *NAME*.

Cómo funciona el comando locate, o, por qué es tan rápido

La razón por la que locate es tan rápido es porque no lee el sistema de archivos para el nombre del archivo o directorio buscado. En realidad se refiere a una base de datos (preparada por el comando updatedb) para encontrar lo que el usuario está buscando y, basándose en esa búsqueda, produce su salida.

Aunque este es un buen enfoque, tiene su parte de inconvenientes. El principal es que después de cada nuevo archivo o directorio que se crea en el sistema, es necesario actualizar la base de datos de la herramienta para que funcione correctamente. De lo contrario, el comando no podrá encontrar archivos/directorios creados después de la última actualización de la base de datos.

Por ejemplo, si intento encontrar archivos con nombres que contengan la cadena ‘tosearch’ en el directorio ‘Downloads’ de mi sistema, el comando find produce un resultado en la salida:

Pero cuando intento realizar la misma búsqueda utilizando el comando locate, no produce ninguna salida.

Esto significa que la base de datos en la que busca locate no se actualizó después de crear el archivo en el sistema. Así que vamos a actualizar la base de datos, lo que se puede hacer con el comando updatedb. Así es como se hace:

sudo updatedb

Y ahora cuando vuelvo a ejecutar el mismo comando locate, muestra los archivos en la salida:

De manera similar, después de que un archivo o directorio ha sido eliminado, necesitas asegurarte de que la base de datos locate ha sido actualizada, ya que de lo contrario, el comando seguirá mostrando el archivo en su salida cuando se busque.

Cómo hacer que locate imprima el número o recuento de entradas coincidentes en la salida

Como hemos visto, el comando locate produce el nombre de los archivos coincidentes junto con sus rutas completas o absolutas en la salida. Pero si lo desea, puede hacer que la herramienta suprima toda esta información, y sólo imprima el número o el recuento de entradas coincidentes en su lugar. Esto puede hacerse utilizando la opción -c de la línea de comandos.

Cómo forzar a locate a imprimir sólo las entradas que corresponden a archivos existentes

Como ya hemos comentado anteriormente en este artículo, si un archivo es eliminado del sistema, entonces hasta que se actualice la base de datos de locate de nuevo, el comando seguirá mostrando ese nombre de archivo en la salida. Para este caso específico, sin embargo, puede omitir la actualización de la base de datos, y seguir teniendo resultados correctos en la salida usando la opción de línea de comandos -e.

Por ejemplo, eliminé el archivo ‘filetosearch.txt’ de mi sistema. Esto fue confirmado por el comando find, que ya no pudo buscar el archivo:

Pero cuando realicé la misma operación usando locate, todavía mostraba el archivo en la salida:

Y sabemos por qué – porque la base de datos de locate no se actualizó después de que el archivo fuera eliminado. Sin embargo, el uso de la opción -e hizo el truco:

Aquí está lo que la página man de locate dice sobre esta opción: «Imprime sólo las entradas que se refieren a los archivos existentes en el momento en que se ejecuta locate.»

Cómo hacer que locate ignore las distinciones entre mayúsculas y minúsculas

Por defecto, la operación de búsqueda que realiza el comando locate distingue entre mayúsculas y minúsculas. Pero puede forzar a la herramienta a ignorar las distinciones entre mayúsculas y minúsculas utilizando la opción de línea de comandos -i.

Por ejemplo, tengo dos archivos en mi sistema, llamados ‘newfiletosearch.txt’ y ‘NEWFILETOSEARCH.txt’. Así que, como puedes ver, los nombres de los archivos son los mismos, sólo que sus casos son diferentes. Si le pides a locate que busque, digamos, «*búsqueda*», entonces sólo mostrará el nombre en minúsculas en su salida:

Pero si utilizas la opción de línea de comandos -i obligas al comando a ignorar las mayúsculas y minúsculas, y ambos nombres de archivo se producen en la salida:

Cómo separar las entradas de salida con ASCII NUL

Por defecto, las entradas de salida que produce el comando locate se separan utilizando el carácter de nueva línea (\n). Pero si lo desea, puede cambiar el separador, y tener el ASCII NUL en lugar de una nueva línea. Esto se puede hacer usando la opción de línea de comandos -0.

Por ejemplo, he ejecutado el mismo comando que usamos en la última sección anterior, pero añadiendo la opción de línea de comandos -0:

Así puedes ver que el separador de nueva línea ya no está ahí – ha sido reemplazado por NUL.

Cómo ver información sobre la base de datos locate

En caso de que quiera saber qué base de datos está utilizando locate, así como otras estadísticas sobre la base de datos, utilice la opción de línea de comandos -S.

Cómo buscar un nombre de archivo exacto usando locate

Por defecto, cuando se busca un nombre de archivo usando locate, entonces el nombre que se pasa – digamos NOMBRE – se reemplaza implícitamente por *NAME*. Por ejemplo, si busco un nombre de archivo ‘testfile’, entonces todos los nombres que coincidan con *testfile* se producen en la salida:

¿Pero qué pasa si el requisito es buscar archivos con nombres que coincidan exactamente con ‘testfile’? Bueno, en este caso, tendrá que utilizar expresiones regulares, que pueden activarse utilizando la opción de línea de comandos -r. Así que, aquí está cómo puede buscar sólo ‘testfile’ usando expresiones regulares:

locate -r /testfile$

Si es nuevo en las expresiones regulares, diríjase aquí.

Conclusión

Locate ofrece muchas más opciones, pero las que hemos discutido aquí deberían ser suficientes para darle una idea básica sobre la utilidad de la línea de comandos, así como para empezar. Te aconsejamos que primero pruebes todas las opciones descritas aquí en tu máquina Linux, y luego pases a otras que puedes encontrar en la página man de la herramienta.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.