buscar-en-linux

Una de las operaciones mas habituales que siempre terminas haciendo es la búsqueda. Me refiero a buscar archivos en Linux. No solo se trata de que no sepas donde has dejado un determinado archivo o documento, también buscas donde hay un determinado archivo de configuración. Pero no solo se trata de esto, sino que en ocasiones, esta búsqueda es un paso intermedio para hacer posteriores operaciones. Es decir, utilizar esta búsqueda como un filtro. Aplicar determinadas operaciones a todos aquellos archivos que cumplan con una determinada extensión o ubicación.

De esta manera, en este nuevo capítulo del tutorial encontrarás algunas herramientas que te van a permitir no solo realizar búsquedas, sino además tratar con el resultado de la búsqueda.

Buscar archivos en Linux

Para buscar archivos en Linux tienes dos herramientas fundamentales, locate y find. En este sentido, voy a entrar en detalle en ambas herramientas para que puedas sacar el máximo provecho de cada una de ellas. El objetivo, es que encuentres el archivo que busques, por muy escondido que se encuentre.

Buscar con locate

Esta herramienta te permite buscar archivos en Linux rápidamente por el nombre del archivo. Para que esta búsqueda sea efectivamente rápida se realiza una indexación en segundo plano. Esta indexación se hace de forma periódica, diaria o semanalmente. Con ello, indicarte que locate no busca en tu equipo, sino en una base de datos.

Para forzar la actualización de la indexación, tienes que ejecutar la siguiente orden,

sudo updatedb

Una vez realizada la búsqueda locate devuelve el nombre de los archivos que cumplen con el patrón específicado.

¿Como especificar lo que buscamos? Tenemos dos opciones, o bien es utilizar comodines o bien expresiones regulares. Si quieres profundizar en esto te recomiendo que le des un vistazo al capítulo del tutorial comodines y expresiones regulares.

Si cuando haces la búsqueda de archivo no utilizas ningún comodín, locate entiende que buscas *archivo*. Eso siempre que no utilices la opción --regex. Si quieres buscar exactamente archivo utiliza locate -b '\archivo'

Ten en cuenta de que si locate encuentra un archivo que cumpla con el patrón que le has indicado, no quiere decir que exista. Simplemente, puedes haberla borrado después de la última indexación realizada.

Es importante que tengas en cuenta que estás buscando en una base de datos donde cada elemento es el nombre del archivo con su ruta completa.

Algunos ejemplos de buscar archivos con locate

A continuación te indico algunos ejemplos que te muestran como utilizar locate para buscar archivos en Linux.

  • Para encontrar todos los archivos que contengan la palabra usuario. locate 'usuario'.
  • Si no quieres que distinga entre mayúsculas y minúsculas locate -i 'usuario'.
  • Para buscar todos los archivos que sean /usuario.* puedes hacerlo con locate '/usuario.' o también con locate --regex '\/usuario\.\S{3}$'.
  • Si quieres limitar el número de resultados, tan solo tienes que añadir la opión -n. Así por ejemplo si quieres solo los dos primeros resultados locate -n 2 'usuario'.
  • Por otro lado, si lo único que te interesa es el número de resultados, la opción que debes utilizar es -c. Por ejemplo locate -c 'usuario'.
  • Como te he indicado, no se comprueba si existe por defecto. Sin embargo puedes modificar este comportamiento utilizando la opción -e.

Buscar con find

find es la herramienta básica para realizar búsquedas en tiempo real en Linux. Me refiero a tiempo real, a que no estás buscando en una base de datos, sino que estás buscando directamente en el sistema de archivos.

Esta herramienta es realmente potente. Así, viene cargada con diferentes opciones que te permitirán personalizar tu búsqueda hasta límites insospechados. Todo esto conlleva que tiene una curva de aprendizaje… pero sinceramente vale la pena.

Para la búsqueda puedes utilizar comodines.

  • Te permite buscar por el nombre del archivo find /directorio -name '*.pdf'. Si no quieres distinguir entre mayúsculas y minúsculas utiliza -iname.
  • También puedes buscar por varios patrones find /directorio -name '*.pdf' -or -name '*.md'.
  • En el caso de que quieras buscar solo archivos, utiliza la opción -type f. Por contra si lo que quieres son directorios, la opción que tienes que utilizar es -type d.
  • En el caso de que quieras utilizar un patrón para la ruta, la opción a utilizar es -path.
  • Puedes buscar en función del tamaño del archivo. PAra ello utiliza la opción -size. Si el tamaño lo precedes de un signo positivo buscará archivos con un tamaño superior al indicado. Mientras que si es negativo, los archivos deberán tener un tamaño inferior. Por ejemplo find / -iname '*usuario*' -size +1k -size -10M, buscará aquellas con un tamaño mayor a 1kB y menor a 10MB.

Sin embargo find no solo se queda en esto sino que va mucho mas allá. También te permite hacer búsquedas por el número de usuario o de grupo. O, por supuesto, utilizando expresiones regulares, que tanto potencial te ofrece. También puedes especificar la máxima y mínima profundidad a la que quieres llegar en la búsqueda.

Por otro lado, tambiés es posible buscar archivos a los que tuviste acceso hace un tiempo con -atime o que modificaste -mtime. Incluso buscar solo aquellos que son ejecutables -executable o que tienes permisos de lectura -readable. O con permisos específicos con la opción -perm.

Acciones con find

Además find nos permite realizar acciones con los resultados encontrados en la búsqueda. Así, algunas opciones son las siguientes,

  • -delete borra todos los archivos o directorios resultado de la búsqueda.
  • -exec comando {} ejecuta el comando sobre el resultado. Se sustituye {} por el nombre del archivo.

Por ejemplo para cambiar los permisos a todos los archivos a 644, podemos ejecutar,

find . -type f -exec chmod 644 {} \;

El mismo caso para directorios y estableciendo los permisos a 755,

find . -typedf -exec chmod 755 {} \;

Algunos ejemplos de buscar archivos con find

  • Para buscar en el directorio que te encuentres find . -type f -name "usuario*". Busca cualquier archivo en el directorio actual y subdirectorios cuyo nombre empieza por usuario.
  • Es posible buscar en múltiples directorios find /home/lorenzo /home/atareao -name "usuario*" -type f.
  • Si quieres hacer lo mismo pero sin tener en cuenta mayúsculas y minúsculas utiliza -iname en lugar de -name.
  • Si quieres buscar todos aquellos que no cumplan un determinado patrón find -type f -not -name "*.md"
  • Para co(piar todos tus archivos mp3 a tu directorio de Música find -type f -iname "*.mp3" -exec cp {} /home/lorenzo/Música \;.
  • Para borrar todos los archivos que comiencen con inic utiliza find . -type f -name "inic*" -exec rm {} \;.
  • Localizar todas los archivos que fueron modificados hace cinco días find -mtime -5 -type f

 

Más información:

Fuente: atareao

¿Quién está en línea?

Hay 4880 invitados y ningún miembro en línea