El día 30 de enero de 2011 11:44, fernando sainz <fernandojose.sa...@gmail.com> escribió: > El día 30 de enero de 2011 15:54, Manuel Soto <mrs...@yahoo.com> escribió: >> 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 >> > > > Entiendo que este punto es el que cambia al estar un fichero en cache > de memoria. > > No se tarda lo mismo en buscar en un archivo que ya esta en memoria > que en uno que hay que leer desde el disco. > Lo mismo pasará con un ejecutable, si el grep se invoca multiples > veces ya estará en memoria después de la primera. > > Saludos. > > > > >> 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 >> >> >> --
Si la máquina es mono usuario puedes desperdiciar el CPU haciendo uso de Cache, caso contrario, lo mejor es hacer el menor número de operaciones, por ejemplo, fork + exec Todo depende del contexto, por ejemplo, tareas repetitivas (búsquedas) en ambientes multiusuario o con carga importante de procesos productivos 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/aanlktinaxdh00nc+c3eiunmmhnuvkzm-1nfde3qrm...@mail.gmail.com