Pregunta ¿Cómo compruebo en bash si un archivo se creó hace más de x tiempo?


Quiero comprobar en linux bash si un archivo se creó hace más de x tiempo.

digamos que el archivo se llama text.txt y el tiempo es de 2 horas.

 if [ what? ]
 then
     echo "old enough"
 fi

76
2018-02-16 09:25


origen


Respuestas:


Solo por tiempo de modificación

if test `find "text.txt" -mmin +120`
then
    echo old enough
fi

O lo mismo en una línea:

#!/bin/bash
find text.txt -mmin +120 -exec echo "old enough" \;

Puedes usar -cmin para cambio o -amin para el tiempo de acceso. Como señalaron otros, no creo que puedas rastrear el tiempo de creación.


103
2018-02-16 09:36



Siempre me gustó usar date -r /the/file +%s para encontrar su edad

También puedes hacer touch --date '2015-10-10 9:55' /tmp/file para obtener un tiempo extremadamente fino en una fecha / hora arbitraria.


33
2018-03-08 00:46



El tiempo de creación no se almacena.

Lo que se almacena son tres marcas de tiempo (generalmente, se pueden desactivar en ciertos sistemas de archivos o por ciertas opciones del sistema de archivos):

  • Última hora de acceso
  • Última hora de modificación
  • Última hora de cambio

un "Cambio" en el archivo se cuenta como cambios de permisos, cambio de nombre, etc. Mientras que la modificación solo tiene contenido.


16
2018-02-16 09:33



Utilizando el stat para averiguar la última fecha de modificación del archivo, date para averiguar la hora actual y un uso liberal de bashisms, uno puede hacer la prueba que desee en función de la última hora de modificación del archivo1.

if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
   echo "$somefile is older then 2 hours"
fi

Si bien el código es un poco menos legible, entonces el find enfoque, creo que es un mejor enfoque luego de ejecutar find para mirar un archivo que ya "encontraste". Además, la manipulación de fechas es divertida ;-)


  1. Como Phil señaló correctamente el tiempo de creación no se registra, pero el uso %Z en lugar de %Y a continuación para obtener el "tiempo de cambio" que puede ser lo que desea.

[Actualizar]

Para usuarios de Mac, use stat -f "%m" $somefile en lugar de la sintaxis específica de Linux anterior


12
2017-09-09 19:18



Aunque ctime no es técnicamente el tiempo de la creación, muy a menudo lo es.

Como ctime no se ve afectado por cambios en el contenido del archivo, por lo general solo se actualiza cuando se crea el archivo. Y sí, puedo oírte gritar, también se actualiza si cambias los permisos de acceso o la propiedad ... pero en general es algo que se hace una vez, generalmente al mismo tiempo que pones el archivo allí.

Personalmente siempre uso mtime para todo, y me imagino que eso es lo que quieres. Pero de todos modos ... aquí hay una repetición de "poco atractivo" de Guss, en una función fácil de usar.

#! / bin / bash
edad de la función () {
   nombre de archivo local = $ 1
   local changed = `stat -c% Y" $ filename "`
   local ahora = `fecha +% s`
   local transcurrido

   let transcurrido = ahora-cambiado
   echo $ transcurrido
}

file = "/"
echo La edad del archivo $ es $ (edad "$ file") segundos.

11
2018-03-25 10:15



Encontrar uno es bueno, pero creo que puedes usarlo de otra manera, especialmente si necesitas saber cuántos segundos tiene el archivo.

date -d "now - $( stat -c "%Y" $filename ) seconds" +%s

usando la fecha GNU


5
2018-05-06 13:06



Considere el resultado de la herramienta 'stat':

  File: `infolog.txt'
  Size: 694         Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 11635578    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/     fdr)   Gid: ( 1000/     fdr)
Access: 2009-01-01 22:04:15.000000000 -0800
Modify: 2009-01-01 22:05:05.000000000 -0800
Change: 2009-01-01 22:05:05.000000000 -0800

Aquí puede ver las tres fechas de Acceso / modificar / cambiar. No hay Fecha de creación. Solo puedes estar seguro cuando el contenido del archivo era modificado (el campo "modificar") o su inodo cambiado (el "cambio" campo).

Ejemplos de cuándo se actualizan ambos campos:

"Modificar" se actualizará si alguien concatena información adicional a el final del archivo.

El "cambio" se actualizará si alguien cambió los permisos a través de chmod.


3
2018-02-16 09:33