Inicio

viernes, 23 de junio de 2017

Comando "find" PARTE 1



En este articulo tengo invertido una buena cantidad de tiempo, creo que un comando como "find" lo merece. Ya que este comando de búsqueda es muy potente cuando se lo utiliza correctamente. Debido a la gran variedad de parámetros que sus sintaxis posee, nos permite realizar búsquedas muy precisas tanto de directorio como archivos.

Voy a dividir el articulo en varias partes para que no se haga tan largo.

PARTE 1

Sintaxis

La sintaxis es muy simple, invocando el comando "find" podemos buscar haciendo uso de tres campos.

find [ruta] [parámetro] [acción]

[ruta]

La ruta es el directorio desde donde comenzara a realizar la búsqueda. También es posible indicarle mas de una ruta para que sean objetos de búsqueda, respondiendo a la sintaxis "find  [ruta] [ruta] [ruta] [parámetro] [acción]". por ejemplo:

finde /tmp /home /etc [parámetro] [acción]

En este caso find analizara los directorios "/tmp", "/home" y "/etc" 

Debe tenerse en cuenta que si no se le indica ninguna ruta, find, comenzara a buscar a partir del directorio en el que nos encontremos posicionados, por ejemplo, si nos encontramos en el directorio /home/usuario, que es el directorio que por defecto inicia junto con la consola, y ejecutamos find, trabajara con su contenido únicamente.

[parámetro]

Son las opciones que se van aplicar sobre la búsqueda, en caso de que no se indica ninguna opción de búsqueda se aplica por defecto -print que indica que se muestre el resultado de la búsqueda.

[acción]

Este campo nos permite ejecutar cualquier comando Linux sobre el archivo o directorio que fue objeto de la búsqueda.

Búsquedas

Búsqueda simple de un directorio o archivo

Find, bajo el parámetro "-name" nos permite nos permite localizar archivos o directorios por su nombre.
Para este tipo de búsqueda ejecutadas con este parámetro es importante señalar que distingue mayúsculas de minúsculas.


Como podemos observar, ejecutamos la búsqueda en el directorio "/home" de una archivo por su nombre "-name" en donde en la primera opción inicia con minúscula y en la segunda con mayúscula. Localizando ambos en dos directorios distintos.

Si queremos que "find" no distinga mayúsculas de minúsculas, el parámetro "-iname" es el que debemos utilizar.


Como podemos observar, a diferencia de la búsqueda anterior, find no imprime ambas localizaciones de los archivos por su nombre sin distinguir mayúsculas de minúsculas.

Búsqueda de archivos de usuarios

Find también nos permite buscar los archivos que pertenecen a un usuario y que se encuentran en un directorio especifico.
Para este tipo de búsquedas utilizamos la ruta que sera objeto de análisis y el parámetro "-user" seguido del nombre del usuario propietario.


De esta forma nos imprimirá los archivos contenidos en el directorio que le indicamos y que pertenecen al usuario señalado.

Si nos movemos al directorio "scripts" y hacemos un "ls -l" podremos visualizar que los resultados corresponde con los parámetros de la búsqueda.


Ya que nos arrojo como resultado solo los archivos que pertenecen al usuario en cuestión discriminando en este caso el archivo "archivo.txt" que pertenece, como vemos, al usuario "root".

Me gustaría aclarar que la ruta que sera objeto de análisis debe ser ingresada completa, ya que si solo ingresamos, tomando el caso del ejemplo anterior, "/scritpts" find interpretara que hay un directorio llamado "scripts" en la raíz, y la búsqueda sera errónea, o mejor dicho, habrá sido mal hecha.


Búsquedas de archivos de grupo

Del mismo modo en que podemos realizar búsquedas por usuarios, lo podemos hacer por grupos propietarios. El parámetro que nos permite realizaras es "-group" seguido del nombre del grupo de propietarios de los archivos que son objeto de la búsqueda.


Acá, podemos ver los archivos encontrados en el directorio "/Fotos", ubicado en "/home/cristian" que pertenecen al grupo "cristian".

Para verlo de otro modo, buscaremos en el mismo directorio archivos que pertenecen al grupo "root"


La misma búsqueda, dos grupos distintos, resultados distintos. y si analizamos el contenido del directorio con los permisos de los archivos bajo el comando "ls -l", observamos que la búsqueda se realizo de forma correcta.


Donde apreciamos a que grupo pertenece cada unos de los archivos.

Búsqueda en múltiples directorios

Otra de las características de esta potente herramienta, es la búsqueda simultanea que se puede realizar en varios directorios para que sean analizadas bajo los parámetros de su sintaxis.


En este caso buscaremos los archivos "Foto.png" y "fotos.png" en los directorios Descargas e Imágenes simultáneamente.

Para que se aprecie la búsqueda utilice primero el parámetro "-name", que como vimos anteriormente nos permite buscar archivos por su nombre distinguiendo mayúsculas y minúsculas, alternando su nombre entre "Foto.png" y "foto.png". Así apreciamos que los resultados son distintos, en cuanto a la ubicación del archivo, pero la búsqueda se realizo en ambos directorios.

Y finalmente realizamos la misma ejecución, pero bajo el parámetro "-iname" para que no nos distinga mayúsculas y minúsculas y nos muestre de manera mas tangible que el análisis se hizo en ambos directorios al devolvernos como resultado la ubicación de ambos archivos, cuyas rutas fueron objeto de análisis.

Búsquedas de expresiones regulares

Para explicar este tipo de búsquedas ejemplificaremos enlistando primero el contenido del directorio que sera objeto de análisis.


Find nos permite buscar archivos por el dígito con el que comienza su nombre y hacer búsquedas por rangos dígito, donde podemos también discriminar en este tipo de búsquedas las exenciones de los archivos que son objeto de búsqueda.

Las búsquedas se realizaran siempre dentro del directorio "/home/cristian/Fotos" 

Cuando el nombre comienza con un numero


Nos buscara todos los archivos contenidos en "/Fotos" que comiencen con el numero "1".

Podemos realizar también búsquedas por rango.


En este caso nos buscara los archivos cuyos nombres comiencen y estén comprendidos entre "1" y "5", ambos inclusive.

Pero podemos ser mas específicos aun, podemos buscar bajo un dígito o un rango y una extensión.


Del mismo modo en que podemos tratar búsquedas con dígitos de inicios de nombre numéricos, los podemos hacer utilizando caracteres alfabéticos.

En este caso buscaremos los archivos que empiecen con la letra "T" (Siempre teniendo en cuenta mayúsculas y minúsculas).


Si necesitamos buscar dentro de un rango lo ejecutamos de la siguiente manera...


Para este caso use 3 ejemplos distintos para tener una visión un poco mas amplia sobre como aplica el rango de búsqueda sobre los resultados.
Podemos apreciar que mientras los caracteres estén dentro del rango de búsqueda, find nos devolverá, todo lo contenido en el. Y cuando no, simplemente queda fuera de los resultados.
En el ejemplo, vemos que cuando buscamos bajo el rango "D-L" deja fuera de los resultados el archivo "Texto.txt", debido a que no esta comprendido en el.

También podemos incluir en la búsqueda las extensiones de los archivos.


Donde nos devolverá todos los archivos que comiencen con la letra comprendida en el rango "A-Z" y que tenga la extensión ".txt".

No esta demás hacer visible que podemos usar el parámetro "-iname" para evitar que la búsqueda sea sensible a mayúsculas y minúsculas. 

Espero sea de utilidad.
Saludos,  Cristian.

2 comentarios: