stat
puede darte esa información:
filemtime=$(stat -c %Y myfile.txt)
%Y
le da la última modificación como "segundos desde The Epoch", pero hay muchas otras opciones; más información. Entonces, si el archivo se modificó el 22 de enero de 2011 a las 15:30 GMT, lo anterior devolvería un número en la región de 1295710237.
Editar :Ah, quieres el tiempo en días desde que se modificó. Eso va a ser más complicado, sobre todo porque un "día" no es un período de tiempo fijo (algunos "días" tienen solo 23 horas, otros 25, gracias al horario de verano).
El ingenuo la versión podría verse así:
filemtime=$(stat -c %Y "$1")
currtime=$(date +%s)
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff
...pero de nuevo, eso suponiendo que un día siempre dura exactamente 86.400 segundos.
Más sobre aritmética en bash aquí.
AGE=$(perl -e 'print -M $ARGV[0]' $file)
establecerá $AGE a la edad de $file en días, como -M
de Perl el operador maneja el stat
llamada y la conversión a días para usted.
El valor devuelto es un valor de punto flotante (por ejemplo, 6,62849537 días). Añade un int
a la expresión si necesita tener un resultado entero
AGE=$(perl -e 'print int -M $ARGV[0]' $file)
Ruby y Python también tienen sus frases ingeniosas para generar estadísticas en un archivo y devolver algunos datos, pero creo que Perl tiene la forma más concisa.
La utilidad de fecha tiene un interruptor conveniente para extraer el mtime de un archivo, que luego puede mostrar o almacenar usando una cadena de formato.
date -r file "+%F"
# 2021-01-12
file_mtime=$(date -r file "+%F")
Ver man date
, la salida de la fecha está controlada por una cadena de formato que comienza con "+"
Las cadenas de formato útiles para comparar muchas fechas pueden incluir:
"+%j": day of year
"+%s": unix epoch time
La aritmética con fechas es un poco complicada en bash, por lo que si necesita un tiempo relativo que funcione en todos los casos, puede que esté mejor con otro idioma.