Sácale el máximo partido al comando find

Linux Tutorial


LupaEl comando find es uno de los más útiles con los que cuentan las consolas de los sistemas operativos Linux/Unix. Pero seguro, que al igual que yo antes de hacer este artículo, desconoces muchas de sus potentes funcionalidades.

En este artículo aprenderás a buscar ficheros en base a su extensión, en función del propietario de los ficheros, según el tamaño de los mismos, discriminando por la última fecha de modificación.

Si quieres sacarle el máximo partido a tus procesos de búsqueda en Linux, sin lugar a dudas, este artículo te ayudará a conseguirlo.

A continuación se presentan a modo de recetario algunos de los flags más importantes de este comando, junto con una explicación de las características de las búsquedas realizadas con dichas opciones.

Búsqueda por nombre

Para la búsqueda de ficheros en base a su nombre es necesario utilizar el flag -name. Por ejemplo:

CODE:
  1. $ find . -name "*.jpg"

El código escrito anteriormente buscará todos los ficheros ubicados en el directorio actual (.) que tengan la extensión .jpg.

Nota: El primer argumento del comando indica el directorio donde ha de realizarse la búsqueda. Por defecto la búsqueda es recursiva, es decir, recorre todo el árbol de directorios desde el directorio indicado, pasando por subdirectorios, hasta los ficheros más profundos.

Búsqueda por propietario

Si lo que te interesa es buscar los ficheros que pertenecen al usuario 'torpedo' bastará con escribir el comando acompañado del flag -user como se muestra a continuación:

CODE:
  1. $ find . -user torpedo

Búsqueda de directorios, ficheros, sockets o enlaces exclusivamente

Para indicar que estás interesado en que aparezcan únicamente directorios, ficheros, sockets o enlaces deberás hacer uso del flag -type junto con los valores d, f, s ó l respectivamente. Por ejemplo la siguiente búsqueda sólo mostraría los directorios:

CODE:
  1. $ find . -type d

Búsqueda por tamaño

Si te interesa encontrar aquellos ficheros que exceden los 200 MB bastará con emplear el flag -size como se indica en la siguiente línea:

CODE:
  1. $ find . -size +200M

Búsquedas por últimas modificaciones, accesos o cambio de permisos

Existen tres flags a este respecto bastante importantes que a continuación se detallan:

  • -atime cuando se accedió al fichero por última vez.
  • -ctime cuando fueron cambiados los permisos del fichero por última vez.
  • -mtime cuando fue cambiado el contenido del fichero por última vez.

Por ejemplo, el siguiente comando busca aquellos ficheros que han sido modificados durante el último día:

CODE:
  1. $ find . -mtime 1

Además, junto a los flags anteriormente descritos, que consideran el tiempo en días, existen variantes cuyos argumentos vienen expresados en minutos. Éstos son -amin, -cmin y -mmin.

Otras opciones

Otras opciones también muy útiles son los flags -perm, filtra mostrando sólo aquellos resultados que tienen determinados permisos, y -newer que muestra exclusivamente aquellos resultados más recientes que el fichero proporcionado como argumento del flag. Por ejemplo, los siguientes comandos buscarían respectivamente los ficheros con permisos totales y los ficheros más recientes que el fichero antiguo.txt.

CODE:
  1. $ find . -perm 777
  2. $ find . -newer "antiguo.txt"

Búsquedas combinadas

Por supuesto, el comando find admite la combinación de todos los flags anteriormente descritos. Por ejemplo:

CODE:
  1. $ find . -type f -user torpedo -name ".jpg" ! -name "foto_prohibida*"

El comando mostrado anteriormente buscaría a partir del directorio actual (.) exclusivamente los ficheros (-type f) pertenecientes al usuario torpedo con extensión .jpg, pero excluyendo (!) aquellos que empezasen por la cadena foto_prohibida.

Acciones sobre los resultados de una búsqueda

Sin lugar a dudas, lo descrito hasta ahora es bastante interesante, pero si además te digo que podrás realizar acciones sobre el conjunto de resultados devueltos por este comando de forma directa. Es francamente útil, ¿no crees?

Para ello lo único que tienes que hacer es utilizar el comando xargs como se muestra a continuación:

CODE:
  1. $ find . -name "*.sh" -print0 | xargs -0 chmod 755

Con la orden anteriormente mostrada, el usuario indica que se busquen todos los ficheros con extensión .sh y se les otorguen permisos 755 a todos esos ficheros. Y todo eso en tan sólo una línea.

Seguro que te has quedado con la boca abierta al ver la de cosas que puedes hacer con este simple comando, ¿no? Pues ahora toca usarlo un poquillo para aprender como funciona y poder conseguir búsquedas mucho más precisas cuando sea necesario.

Enlace de la fuente original

Suscríbete!!

Seguro que también te interesa

12 Comentarios ↓

  • yesenia el 16 de Noviembre de 2007 a las 22:24

    esta chido todo lo que dise esto

  • VIOLETA el 16 de Noviembre de 2007 a las 22:33

    LE FALTA EXPLICACION!!!

  • Jaluro el 16 de Noviembre de 2007 a las 22:43

    Hola VIOLETA, ¿podrías indicarme a qué es a lo que le falta explicación?

    Si no especificas más, no puedo explicarte aquello que no entiendes.

    Ciao

  • Marcelo el 19 de Noviembre de 2007 a las 2:00

    Muy clara la explicación. Podrías ampliar como buscar en un determinado directorio y todos sus subdirectorios?

  • Jaluro el 19 de Noviembre de 2007 a las 14:10

    Hola Marcelo. Sí, es muy sencillo, para indicar el directorio en el que deseas buscar debes indicarlo como primer parámetro. Por ejemplo:

    $ find ..dir.. -name "*.jpg"

    El código anterior realizaría una búsqueda de todos los documentos con extensión .jpg que se encuentran en el directorio ..dir.., pero no sólo en éste, porque, como explico en el artículo, el comando find es recursivo, de manera que buscará en este directorio y en todos sus subdirectorios.

    Espero haber aclarado tus dudas, en caso contrario no dudes en volver a preguntar.

    Ciao

  • Antonio el 5 de Marzo de 2008 a las 14:05

    como podría utilizar find para que sólo se visualizara los nombres de los archivos sin la ruta?

  • Jaluro el 12 de Marzo de 2008 a las 15:46

    Hola Antonio, la verdad es que con find sólo no lo sé. Pero puedes utilizar sed y mediante un pipe conseguir lo que tú quieres.

    Aquí te dejo una referencia sobre cómo usarlo:

    find . -name "*" | sed 's:\(.*/\)\?\([^/]*\):\2:'

    Lo que hace el código básicamente es quedarse con lo que está a la derecha del último de los caracteres “/” en caso de haber alguno.

    Quizás en un futuro tenga que hacer un post sobre sed, es tremendamente útil.

    Ciao

  • UbuntuX » Búsqueda de ficheros: Comando find el 12 de Abril de 2008 a las 1:30

    [...] Vía:instalaches.com [...]

  • oscarcf el 2 de Octubre de 2008 a las 16:35

    Hola
    como puedo buscar los archivos que tengan una palabra determinada…por ejemplo los archivos que tengan la palabra userName??

    gracias

  • Jaluro el 3 de Octubre de 2008 a las 11:06

    Hola oscarcf, la respuesta a tu pregunta es

    $ find [Directorio] -name "*userName*"

    Ciao

  • anonimo el 26 de Marzo de 2009 a las 18:51

    Utilizando el comando find ¿como busco todos los ficheros con la extensión JPG ó jpg?

  • besa32bits el 5 de Octubre de 2009 a las 13:36

    La verdad cumpa muy buen articulo bien explicado, un buen aporte, yo estuve buscando info sobre este comando y hasta ahora es de lo meor que he visto.
    gracias

Deja tu comentario

Por favor, no uses un lenguaje inapropiado, spam o cualquier otro tipo de conducta inadecuada. De lo contrario me reservo el derecho de eliminar y/o modificar aquellos comentarios que contengan algo de lo citado anteriormente.

:) xD :)) =)) ;) :p :( :(( #-o 8-| :-l :o :-? :-< :-s :^) m|-) m:| :s :$ (y) (n) /:) <:o) :)>- :-ss [-o< @:d/ ^:)^ m:d m:@ m:p m;) (h) :'( :mrgreen: (ap) (au) (ci) (co) (6) (&) (@) ~:> (8) (~) (g) (^) ~o) (h5) (yn) (pi) (pl) (l) (f) (k) (u) (w) 8-x :[ o-+ o-> o=>