2012-01-13 19 views
6

Esto debería ser bastante simple, pero no lo estoy averiguando. Tengo una gran base de código de más de 4 GB en Linux. Algunos archivos de encabezado y archivos xml se generan durante la creación (usando gnu make). Si es importante, los archivos de encabezado se generan en función de los archivos xml.archivos grep basados ​​en la marca de tiempo

Quiero buscar una palabra clave en el archivo de encabezado que se modificó por última vez después de una instancia de tiempo (Es mi tiempo de compilación de inicio), y similarmente archivos xml, pero consultas grep separadas.

Si lo ejecuto en todos los archivos posibles de encabezado o xml, tomará mucho tiempo. Solo aquellos que fueron generados automáticamente. Además, la búsqueda debe ser recursiva, ya que hay muchos directorios y subdirectorios.

+0

Es posible que desee incluir ejemplos de sus comandos actuales. Nos ahorra la molestia de señalar las cosas obvias que ya sabes. – sehe

Respuesta

11

Para encontrar 'pattern' en todos los archivos más recientes que some_file en el directorio actual y sus subdirectorios recursivamente:

find -newer some_file -type f -exec grep 'pattern' {} + 

puede especificar la fecha y hora directamente en date -d y uso de formatos otras find pruebas por ejemplo, , -name, -mmin.

La lista de archivos también puede ser generada por su sistema de compilación si find es demasiado lento.

herramientas más específicas como ack, etags, GCCSense podrían utilizarse en lugar de grep.

+0

Gracias, me encontré con algo más valioso que responder. Nunca me había encontrado con GCCSense. Estaba buscando capacidades de finalización de código de eclipse en vim. Adivina su muy recientemente desarrollado. – Kamath

+0

¿Por qué en la Tierra hay una bandera de "menos" pero no una de "mayor"? – Guillochon

+2

@Guillochon: ['! -newer'] (http://stackoverflow.com/q/13838845/4279) – jfs

11

usted podría utilizar el comando find:

find . -mtime 0 -type f 

imprime una lista de todos los archivos (-type f) en y por debajo del directorio actual (.) que se modificaron en las últimas 24 horas (-mtime 0, 1 sería 48 h, 2 serían 72 h, ...). Trate

grep "pattern" $(find . -mtime 0 -type f) 
+0

Respuesta impresionante, funciona bien en CentOS 5.6. – crmpicco

1

Use esto. Porque si find no devuelve un archivo, entonces grep seguirá esperando una entrada para detener el script.

find . -mtime 0 -type f | xargs grep "pattern" 
Cuestiones relacionadas