El día 30 de enero de 2011 09:31, fernando sainz <fernandojose.sa...@gmail.com> escribió: > El día 30 de enero de 2011 12:16, Camaleón <noela...@gmail.com> escribió: >> El Sat, 29 Jan 2011 18:17:46 -0430, Manuel Soto escribió: >> >>> El 28 de enero de 2011 13:56, Camaleón escribió: >>>> >>>> El Fri, 28 Jan 2011 12:06:37 -0430, Orlando Nuñez escribió: >>>> >>>> > Quien pueda darme una mano, hace tiempo usaba de vez en cuando un >>>> > comando en la consola para buscar cadena de caracteres en archivos, >>>> > pero no encuentro el comando, alguien podria ser tan amable de >>>> > indicarme como hacerlo >>>> >>>> Yo tengo guardado un "one-liner" para eso: >>>> >>>> # buscar texto en archivos >>>> find /ruta/a/directorio/* -type f -exec grep -H 'texto' {} \; >>>> >>> Hola Camaleón >>> >>> Con este "one-liner" crearías demasiados procesos, quien sabe si el >>> mayor esfuerzo será crear tantos procesos; para eso esta el xargs >>> justamente, además, mientras hace el grep sigue buscando archivos en >>> procesos paralelos >> >> Probemos... >> >> stt008:~# time find /var/log/* -type f -exec grep -H 'ttyS0' {} \; >> (...) >> real 0m0.097s >> user 0m0.048s >> sys 0m0.060s >> >> >> stt008:~# time find /var/log/* -type f | xargs grep -H "ttyS0" >> (...) >> real 0m0.013s >> user 0m0.012s >> sys 0m0.004s >> >> >> stt008:~# time grep -H "ttyS0" /var/log/* >> (...) >> real 0m0.009s >> user 0m0.004s >> sys 0m0.004s >> >> >> Pues sí, es el más lento de todos :-) >> >> Saludos, >> >> -- >> Camaleón >> >> >> > > No tan deprisa forastera... :-) > > > Olvidaste que el sistema operativo usa cache de disco.... > (Repite esas pruebas en otro orden con la máquina reiniciada...) > > Saludos. > > > --
Ok, el tema se pone interesante Usemos el cache de lápiz antes del de disco (análisis previo) A) Tiempo del recorrido del(os) directorio(s) y archivos: es igual para todos los modelos. Descartable B) Tiempo para levantar el find: sólo en los primeros dos modelos. En el modelo 3 sólo habrá 1 grep lo que equivale a 1 find, por lo que podríamos pensar en despreciar el tiempo B C) Tiempo para leer el archivo y buscar la cadena: Es igual en todos los modelos por usar grep. Lo descartamos D) Tiempo para levantar el grep y dar inicio y cierre del proceso: En el modelo 1 habrá tantos grep como archivos se encuentren En el modelo 2 habrá 1 grep por cada vez que la línea de comando se haga grande. supongamos que caben el la línea de comando la palabra grep y 10 archivos, se habría reducido a 10% las llamadas al grep. Hay que agregar que cuando el xargs está consumiendo CPU preparando la linea de comando y ejecutando al grep el find sigue buscando sin parar E) Tiempo para que el find escriba el nombre del archivo en el pipe y el xargs lo lea. bastante despreciable F) Tiempo para levantar el xargs. Debe ser similar a 1* D Modelo 1: c + D * n Modelo 2: c + D * 2 + E Modelo 3: c Siendo: c = tiempo mínimo común n = número de archivos Con uno o 2 archivos el modelo 1 debe ser más rápido que el modelo 2. Si sólo quieres hacer una búsqueda recursiva el modelo 3 debe ser el más rápido Para hacer una operación X recursiva el modelo 2 es el más genérico y rápido, por experiencia propia en miles de archivos, sólo que debes manejar bien los nombres con espacios. MS -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/aanlktikkpwmx-yemhupzd+rzcyqg4npzy_pyanote...@mail.gmail.com