2012-06-05 18 views

Respuesta

24

Esto es un poco diferente de la solución de Banthar, pero funcionará con versiones de find que no soportan -newermt y se muestra cómo utilizar el comando xargs, que es una herramienta muy útil.

Puede usar el comando find para buscar archivos "de cierta edad". Esto encontrará todos los archivos modificados entre 5 y 10 días:

find /directory -type f -mtime -10 -mtime +5 

A continuación, buscar los archivos de una cadena:

find /directory -type f -mtime -10 -mtime +5 -print0 | 
    xargs -0 grep -l expression 

También puede utilizar el interruptor -exec, pero me parece xargs más legible (y a menudo funcionará mejor también, pero posiblemente no en este caso).

(Tenga en cuenta que la bandera -0 está ahí para que este comando funciona en archivos con espacios incrustados, como this is my filename.)

actualización para la pregunta en los comentarios

Al proporcionar múltiples expresiones de find , están unidos juntos. Por ejemplo, si usted pide:

find . -name foo -size +10k 

... find sólo devolverá los archivos que son tanto (a) nombrado foo y (b) mayor de 10 Kbytes. Del mismo modo, si especifica:

find . -mtime -10 -mtime +5 

... find sólo devolverá los archivos que son (a) Hace más reciente de 10 días y (b) mayor que hace 5 días.

Por ejemplo, en mi sistema en este momento:

$ date 
Fri Aug 19 12:55:21 EDT 2016 

tengo los siguientes archivos:

$ ls -l 
total 0 
-rw-rw-r--. 1 lars lars 0 Aug 15 00:00 file1 
-rw-rw-r--. 1 lars lars 0 Aug 10 00:00 file2 
-rw-rw-r--. 1 lars lars 0 Aug 5 00:00 file3 

Si pido "archivos modificados hace más de 5 días (-mtime +5) I consiga:

$ find . -mtime +5 
./file3 
./file2 

Pero si pido "archivos modificados hace más de 5 días pero menos de 10 días ag O"(-mtime +5 -mtime -10), me sale:

$ find . -mtime +5 -mtime -10 
./file2 
+0

¿Puede alguien explicar cómo especificar -mtime dos veces se usa para especificar un rango? Específicamente, ¿por qué un número negativo para la primera ocurrencia y un número positivo para la segunda? O no lo entiendo, o no está funcionando en Ubuntu 14.04.3 LTS. No se discute en la página del manual que estoy viendo. – battey

+0

@battey, he actualizado mi respuesta con una respuesta a su pregunta. – larsks

14

Combinar grep con find:

find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \; 
+1

Esta opción '-newermt' parece no documentada, no aparece en el enlace ni en mis páginas man. Sin embargo, ¡es maravilloso! ¿Cómo lo descubriste? – brandizzi

+2

@brandizzi Está bajo '-newerXY'. –

-1

find no parecen tener opciones donde puede especificar fechas específicas para la comparación de marca de tiempo (al menos la versión en mi portátil no - pueden haber otras versiones y/u otras herramientas que funcionan de manera similar), por lo que tendrá que usar la cantidad de días. Por lo tanto, a partir de 2012/06/05, desea buscar archivos de más de 9 días pero anteriores a 6 días:

find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ 
Cuestiones relacionadas