ultimos - ultimo archivo modificado linux
Grep dentro de todos los archivos creados dentro del rango de fecha (3)
Combina grep con find :
find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ /{/} /;
Estoy en el sistema operativo Ubuntu. Quiero grep una palabra (digamos XYZ) dentro de todos los archivos de registro que se crean dentro del rango de fecha 28-may-2012 a 30-may-2012.
¿Cómo puedo hacer eso?
find
que no hay opciones donde pueda especificar fechas específicas para la comparación de la marca de tiempo (al menos la versión en mi computadora portátil no la tiene - puede haber otras versiones y / u otras herramientas que funcionen de manera similar), por lo que tendrá que Usa el número de días. Por lo tanto, a partir del 2012/06/05, desea buscar archivos con más de 9 días pero con más de 6 días:
find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ
Esto es un poco diferente de la solución de Banthar, pero funcionará con versiones de find
que no son compatibles con -newermt
y muestra cómo usar el comando xargs
, que es una herramienta muy útil.
Puede utilizar el comando find
para localizar archivos "de cierta edad". Esto encontrará todos los archivos modificados entre 5 y 10 días atrás:
find /directory -type f -mtime -10 -mtime +5
Para luego buscar esos archivos por una cadena:
find /directory -type f -mtime -10 -mtime +5 -print0 |
xargs -0 grep -l expression
También puede usar el conmutador -exec
, pero encuentro que xargs
más legible (y a menudo también tendrá un mejor desempeño, pero posiblemente no en este caso).
(Tenga en cuenta que el -0
está ahí para permitir que este comando opere en archivos con espacios incrustados, como this is my filename
).
Actualización para pregunta en comentarios.
Cuando proporciona varias expresiones para find
, se unen con AND. Por ejemplo, si usted solicita:
find . -name foo -size +10k
... find
solo devolverá archivos que (a) se foo
y (b) tengan más de 10 kbytes. Del mismo modo, si especifica:
find . -mtime -10 -mtime +5
... find
solo devolverá los archivos que son (a) más nuevos que hace 10 días y (b) más antiguos que hace 5 días.
Por ejemplo, en mi sistema es actualmente:
$ 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 solicito "archivos modificados hace más de 5 días ( -mtime +5
) obtengo:
$ find . -mtime +5
./file3
./file2
Pero si pido "archivos modificados hace más de 5 días pero hace menos de 10 días" ( -mtime +5 -mtime -10
), obtengo:
$ find . -mtime +5 -mtime -10
./file2