On Fri, Feb 27, 2009 at 10:23:31AM -0800, Rodrigo Gallardo wrote: > On Fri, Feb 27, 2009 at 09:48:16AM -0800, Carmen Marcela Alegria C. wrote: > > Esta bien interesante el tema, a mi me gusta mucho el poder de la linea de > > comando ;) > > > > > 3) find . -type f -iname '*.htm*' -print0 | xargs -0 grep -il body > > es bueno, pero es realmente necesario que se haga otro proceso > > por el | para hacerle el grep? no seria mejor hacer: > > > > find . -type f -iname '*.htm*' -print0 -exec grep -il body {} \; > > Hacer > find ... | xargs grep ... > crea > 1 proceso para el find > 1 proceso para el xargs > 1 proceso grep (a menos que hayan muchos cientos de archivos a revisar, en > cuyo caso creará 1 grep para cada varios cientos) > > es decir, 3 en total. > > Por otro lado, > find ... -exec grep ... > crea > 1 proceso para find > 1 proceso grep *para cada archivo que encuentra* > > es decir, te ahorras 1 proceso por el xargs, y lo cambias por decenas > o cientos de greps. La ventaja de -exec es que se puede usar cuando lo > que quieres ejecutar requiere el nombre del archivo antes del final de > la lista de argumentos. Ejemplo: Mover todos los .jpg creados hace más > de cierto tiempo, todos a un mismo directorio final. > > > $ find . -name '*jpg' -cmin +600 -exec mv \{} directorio_destino \; > > y no podemos usar xargs aquí, por que directorio_destino tiene que ir > *después* del archivo a mover.
Si hay un punto en contra de xargs, es cuando la cantidad de elementos resulta muy numerosa y toma muchísimo tiempo que se genere la lista, para luego ser procesada por la orden que viene tras el pipe. Si combinas find -exec con sh -c no estás limitado al orden de los argumentos y obtienes más flexibilidad. Por ejemplo, volviendo al ejemplo de body, supongamos que deseamos identificar los archivos que tienen body en el contenido, luego crear una copia de respaldo y cambiar body por corpse: $ find . -type f -iname "*.htm*" -exec sh -c \ 'grep -iq "body" $0 && mv $0 $0.bak && sed "s/body/corpse/gi" $0.bak > $0' {} \; Saludos. -- Pablo Jiménez -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org