Encuentra un archivo que tiene 30 minutos de antigüedad

12

¿Cómo puedo encontrar el archivo que tiene 30 minutos de antigüedad /bin/ksh?

Aravind
fuente
44
¿Quiere decir "su contenido cambió hace 30 minutos" o "no existía hasta que se creó hace 30 minutos"? Además, ¿qué sistema operativo estás usando? Los diferentes sistemas operativos vienen con diferentes versiones de find.
Mark Plotnick
@ Mark Plotnick quiero encontrar el archivo que tenía 30 minutos de antigüedad
Aravind
Creo que él / ella quiere decir que fue creado hace 30 minutos . Como si, por ejemplo, alguien tiene X años, nació hace X años.
erik

Respuestas:

15

En Linux, no hay seguimiento del tiempo de creación de un archivo. Solo puedes acceder a:

  • la última hora de modificación del contenido (una creación cuenta como una modificación, por supuesto) mtime,
  • el último tiempo de acceso atime,
  • El último tiempo de modificación de los metadatos ctime.

Si desea buscar archivos con una prueba basada en estos tiempos, find( man find) puede ayudarlo.

Lo usaría de esta manera para encontrar un archivo al que se accedió exactamente hace 30 minutos en su directorio actual y sus subdirectorios:

find -amin 30

Por lo general, querrás usar un intervalo, ya que puede ser difícil dar un número exacto de minutos:

find -amin +25 -amin -35

Esto encontrará archivos accedidos hace más de 25 pero hace menos de 35 minutos.

Y si solo le interesa el tiempo de modificación y no el tiempo de acceso (es decir, de lectura), reemplácelo -amincon -mmin.

lgeorget
fuente
no quieres atime. atime es tiempo de acceso.
ctrl-alt-delor
@richard El OP no especificó lo que quería decir así que ... De todos modos, yo mtimetambién puse la respuesta
lgeorget
1
@ lgeorget cuando lo uso -mtime 30estaba mostrando los archivos de 30 días de antigüedad.
Aravind
@ user2910201 Ups me estúpido. XtimeLas opciones son para días y las Xminopciones para minutos. Mi mal, edito la respuesta
lgeorget
2
@ user2910201, pero tenga en cuenta que puede usarlo Xtimecon cualquier unidad de tiempo razonable, como 30mtreinta minutos o 5dcinco días
lgeorget
3

Puedes usar mtimepara hacerlo:

find . -mmin 30    #exactly 30 minutes old
ryekayo
fuente
esto le dirá los archivos que estaban createdo modified30 minutos atrás
g4ur4v
@ g4ur4v cuando lo uso -mminestá mostrando -mminque no es una opción válida
Aravind
Pruebe esto:find /path -mtime +30m
ryekayo
No sé por qué no se reconoce -mmin, he mirado por muchos ejemplos que usan ese comando ..
ryekayo
3

Sin GNU/BSD find

TZ=ZZZ0 touch -t "$(TZ=ZZZ0:30 date +%Y%m%d%H%M.%S)" /reference/file

y entonces find . -newer /reference/file

solución dada por Stéphane Chazelas

Aravind
fuente