junio 04, 2008

Comandos: find

Mi amigo Quique, me prestó esta entrada en su blog, relativa al comando find:



"Este es mi primer post de caracter técnico a pedido de un amigo.

Parece algo minúsculo dedicarle un post a un solo comando de Unix / Linux, pero es de destacar la utilidad del mismo y como contrapartida éste, como tantos otros comando de unix, puede ser usado en Windos sin problemas mediante Cygwin, del que vamos a hablar mas adelante

En mi día a día he encontrado diversas formas y utilidades al find. ¿Pero qué tiene de especial?

find puede usarse tanto para buscar un elemento determinado como para ejecutar acciones sobre el mismo.

Vamos a los sintaxis básica:

find [path...] [expression]

Pero ésto no dice demasiado, asi que mejor me voy a centrar en los ejemplos.

1) Digamos que quiero buscar un archivo por su nombre en un directorio.. digamos /home

# find /home -name archivo.gz

2) Ahora suponemos que quiero buscar en mi /home… los archivos y solo los archivos que hayan sido modificados entre el día de hoy y el de ayer, es decir, que tengan menos de 2 días de modificados (incluye crearlos), y quiero verlos en modo extendido.

# find /home -type f -mtime -2 -exec ls-l {} \;

* Con -type indicamos el tipo de elemento (f para archivo y d para directorio).

* Con -mtime indico cuando fue modificado por última vez ese archivo ( si le ponemos -n son menos de n días ; si le ponemos n es hace exactamente n días (sin contar hoy); y si le ponemos +n (adiviná) son los con más de n días). Del mismo modo se puede usar el parámetro -atime (access time) o el -ctime (create time)

* Con -exec lo que hago es decirle al find que ejecute algún otro comando con los archivos que encontró (que van entre llaves en la sentencia). Ésto nos abre tremendamente las posibilidades de automatizar tareas ya que podemos por ejemplo comprimir, borrar o hacer cualquier cosa con un grupo de archivos , directorios o ambos que cumplan con las condiciones que le imponemos con el find.

Para terminar, otro parámetro que se le puede agregar a nustra sarta find es el -mount o -xdev (según el SO que usemos), esto es de gran utilidad, y sirve para que la búsqueda no se escape por otros filesystems montados en puntos que están donde estoy buscando.

Para mayor información hacer man find ;)

Bueno, espero sirva.

Hasta la próxima"

3 comentarios:

Dawud dijo...

Hola.
Me ha llamdo la atención que menciones Cygwin: estoy intentando que Cygwin sea capaz de realizar algo muy simple en un Linux, pero que en Windows le lleva un par de horas (me explicaré ;)
Intento localizar ficheros en una máquina Windows con una antigüedad superior a 93 días (a resaltar que se trata de buscar entre > 700.000 ficheros -> 7~8 GB)
primero intenté con un

find ${RUTA_BORRADO} -atime +93 -type f -exec rm -f {} \;

luego mejoré el rendimiento con

find ${RUTA_BORRADO} -atime +93 -type f | xargs rm -f

porque así no hace fork para cada fichero que lee e intenta ejecutar el -exec. (agradecimientos a la lista debian en español)

Ahora estoy probando con perl
(find::file::rule)

Otra forma es con find2perl...

Pueden hacerse tareas programadas llamando a bash.exe script.sh, si lo paths están bien definidos.

Saludetes.

admin dijo...

dawud, muchas gracias por tu comentario. Quien escribio lo que mencionas es mi amigo Quique, quien me "presto" este articulo para ponerlo en mi blog...le voy a transmitir tu comentario. Personalmente no soy muy amante de CygWin: creo que al Cesar lo que es del Cesar, es decir, si necesitas usar "cosas de Windows", usa Windows; aunque debo reconocer que mas de una vez instalar CygWin me ayudo a resolver algunas cuestiones puntuales, como por ejemplo, correr un script en un cron para empaquetar y comprimir archivos y enviarlos a un servidor *nix remoto.
Saludos y gracias!!!

Pulpo dijo...

Excelente blog estimadísimo amigo! Parabens! Vou ter que adicionar-lo nos RSS, a informação é bem legal!
[]'s