Obtener todos los archivos que se han modificado en una fecha específica

20

¿Es posible encontrar todos los phparchivos dentro de un directorio determinado que se hayan modificado en una fecha determinada?

Estoy usando

find /var/www/html/dir/ -mtime -28 | grep '\.php' 

para modificar archivos en los últimos 28 días, pero solo necesito archivos que se hayan modificado en la siguiente fecha: 2011-02-08

Roland
fuente

Respuestas:

22

En versiones recientes de find(por ejemplo, GNU 4.4.0) puede usar la -newermtopción. Por ejemplo, para buscar todos los archivos que se han modificado el 2011-02-08

$ find /var/www/html/dir/ -type f -name "*.php" -newermt 2011-02-08 ! -newermt 2011-02-09

También tenga en cuenta que no necesita canalizar grep para buscar archivos php porque find puede hacerlo por usted en la -nameopción.

Eche un vistazo a esta respuesta SO para obtener más sugerencias: ¿Cómo usar 'buscar' para buscar archivos creados en una fecha específica?

dogbane
fuente
4

Molesto, no hay ninguna forma directa con el estándar find. Las versiones recientes de los findsistemas GNU (por ejemplo, Linux no incrustado, Cygwin) y algunos * BSD tienen opciones como -newermtcomparar una fecha de archivo con una fecha deletreada .

Con el estándar find, todo lo que puede hacer es comparar la fecha del archivo con la fecha actual ( -mtime) o con un archivo fijo. La fecha actual generalmente no es útil en este caso (cuenta desde el momento en que ejecuta el findcomando, mientras que la mayoría de las aplicaciones requieren una fecha de calendario). Eso te deja con la dificultad de crear archivos temporales para definir un rango.

touch -t 201103070000 start.tmp
touch -t 201103080000 stop.tmp
find . -newer start.tmp \! -newer stop.tmp -print
rm start.tmp stop.tmp
Gilles 'SO- deja de ser malvado'
fuente
2

Ya tiene casi el comando correcto, para versiones de findeso no le permitirá usar fechas:

find /var/www/html/dir/ -mtime 27 | grep '\.php'

En general, for find- n significa menos que , n significa igual , + n significa "más que". Tradicional findtiene algunas excepciones, pero GNU findy otras versiones más nuevas, como BSD / Mac OS X, las corrigieron. (Tenga esto en cuenta si alguna vez se encuentra en un Solaris u otro sistema comercial de Unix).

geekosaur
fuente
1

Con zshusted podría usar la funciónage para imprimir solo los nombres de los archivos que se han modificado en una fecha determinada:

edad de carga automática
print -rl - * .php (.e: age 2011/02/08 :)

o, si desea buscar de forma recursiva:

edad de carga automática
Setopt Extendedglob
print -rl - ** / *. php (.e: age 2011/02/08 :)
don_crissti
fuente