martes, 10 de mayo de 2016

Mejorando la eficiencia

Cuando usamos la acción -exec, arranca una nueva instancia del comando especificado cada vez que encuentra un archivo coincidente. Hay veces que podríamos preferir combinar todos los resultados de la búsqueda y arrancar una instancia única del comando. Por ejemplo, en lugar de ejecutar los comandos así:

ls -l archivo1
ls -l archivo2

podríamos preferir ejecutarlos así:

ls -l archivo1 archivo2

ésto hace que el comando se ejecute sólo una vez en lugar de muchas veces. Hay dos formas de hacer ésto. La forma tradicional, usando el comando externo xargs, y la forma alternativa, usando una nueva característica del propio find. Hablaremos sobre la forma alternativa primero.

Cambiando el punto y coma del final por un signo más, activamos la capacidad de find de combinar los resultados de la búsqueda en una lista de argumentos para una ejecución única del comando deseado. Volviendo a nuestro ejemplo, ésto:

find ~ -type f -name 'foo*' -exec ls -l '{}' ';'
-rwxr-xr-x 1 me me 224 2007-10-29 18:44 /home/me/bin/foo
-rw-r--r-- 1 me me   0 2008-09-19 12:53 /home/me/foo.txt

ejecutará ls cada vez que encuentre un archivo coincidente. Cambiando el comando a:

find ~ -type f -name 'foo*' -exec ls -l '{}' +
-rwxr-xr-x 1 me me 224 2007-10-29 18:44 /home/me/bin/foo
-rw-r--r-- 1 me me   0 2008-09-19 12:53 /home/me/foo.txt

tendremos los mismos resultados, pero el sistema sólo habrá ejecutado el comando ls una vez.

No hay comentarios:

Publicar un comentario