11 de Diciembre, 2004

find es poderoso

Y rematadamente complicado de utilizar, o al menos saber todo lo que hace.

He necesitado borrar todos los ficheros terminados en ~ que me genera kate como backup de las ediciones. Es una buena idea que lo haga, pero cuando el trabajo está listo, estorban.

Un vistazo a la página del manual de find y:

$ find * -name "*~" -exec rm {} \;

Lo que recorre el directorio actual y sus subdirectorios buscando ficheros con ~ al final del nombre (el * es un patrón de sustitución que todos conocemos), y ejecuta rm con el fichero como argumento (se denota por {}) y el \; indica el final del comando. Potente, ¿no?

Se podría intentar algo como:

$ for file in *~; do rm $file; done

Pero, aparte de ser más lento (para muchos, muchos ficheros o máquinas lentas, muy lentas, se nota), no nos recorrería subdirectorios.

En un vistazo a la página del manual de un comando poco conocido he solucionado mi problema puntual, pero además me doy cuenta de lo ignorante que soy :D.

Recordemos mi MD5 recursivo. Ahora lo haría de otra forma:

DIR="/path/al/directorio"
find $DIR/* -type f -exec md5 {} >> $DIR.MD5 \;

Aun siendo el mismo resultado, esta versión es más elegante. ¿Pero es mejor?

Voy a calcular el MD5 de todos los vídeos de las jornadas. Esta es una máquina potente, pero se trata de 1.2GB, con lo que alguna diferencia sí podemos ver:

$ time sh md5r-xarg

real    0m58.498s
user    0m15.380s
sys     0m2.290s
$ time sh md5r-find

real    1m0.234s
user    0m15.570s
sys     0m2.100s

Sin ser una prueba rigurosa, pues va a ser lo mismo :o.

Ahora ya podríamos discutir si es mejor ser o no elegante, o ser más o menos comprensible, o simplemente... que cada cual sea él mismo y lo haga como bien buenamente pueda. Yo humildemente comunico aquí mis descubrimientos :).

Anotación por Juan J. Martínez.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.