Respuestas:
Solo por tiempo de modificación
if test `find "text.txt" -mmin +120`
then
echo old enough
fi
Puede usar -cmin
para cambiar o -amin
para tiempo de acceso. Como otros señalaron, no creo que puedas rastrear el tiempo de creación.
find
devolvió un valor distinto de cero cuando no se encontraron coincidencias.
text.txt
se presume que no es un directorio.
[ "$(find path/to/file -mmin +120)" ] && echo "it is old"
Siempre me gustó usar date -r /the/file +%s
para encontrar su edad.
También puede hacer touch --date '2015-10-10 9:55' /tmp/file
para obtener una hora extremadamente precisa en una fecha / hora arbitraria.
let AGE=$(($(date +%s)-$(date -r /path/to/file +%s)))
[con el supuesto de que se creó y nunca se modificó, o "edad relativa a la modificación"]
function file-age { FILE_CREATED_TIME=`date -r "$1" +%s`; TIME_NOW=`date +%s`; echo "$[ ${TIME_NOW} - ${FILE_CREATED_TIME} ]"; }
$[ ]
es, si no obsoleta , al menos antiguo y menos portátil , y se debería usar $(( ))
en su lugar; y las comillas inversas son más frágiles que $( )
; Además, es posible que los guiones en los nombres de las funciones no sean completamente portátiles. ¡Sin embargo, la esencia es buena!
Usando el stat
para averiguar la fecha de la última 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 archivo 1 .
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 que el find
enfoque, creo que es un enfoque mejor que ejecutarlo find
para ver un archivo que ya "encontró". Además, la manipulación de fechas es divertida ;-)
%Z
lugar de a %Y
continuación para obtener el "tiempo de cambio", que puede ser el que desee.[Actualizar]
Para usuarios de mac, use en stat -f "%m" $somefile
lugar de la sintaxis específica de Linux anterior
stat
no está incorporado - muy mal de mi parte, lo arreglaré.
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 mediante ciertas opciones del sistema de archivos):
un "Cambio" en el archivo se cuenta como cambios de permiso, cambio de nombre, etc. Mientras que la modificación es solo contenido.
Aunque ctime no es técnicamente el momento de la creación, con bastante frecuencia lo es.
Dado que ctime no se ve afectado por los cambios en el contenido del archivo, generalmente solo se actualiza cuando se crea el archivo. Y sí, puedo escucharlos a todos gritar, también se actualiza si cambian los permisos de acceso o la propiedad ... pero generalmente eso es algo que se hace una vez, generalmente al mismo tiempo que coloca el archivo allí.
Personalmente siempre uso mtime para todo, e imagino que eso es lo que quieres. Pero de todos modos ... aquí hay una repetición de la fiesta "poco atractiva" de Guss, en una función fácil de usar.
#! / bin / bash function age () { nombre de archivo local = $ 1 local cambiado = `stat -c% Y" $ nombre de archivo "` local ahora = `fecha +% s` local transcurrido dejar transcurrido = ahora-cambiado echo $ transcurrido } file = "/" echo La antigüedad de $ file es $ (age "$ file") segundos.
local changed=$(perl -MFile::stat -e "print stat(\"${filename}\")->mtime")
superuser.com/questions/427551/…
chmod
, aplicado en el archivo, anulará esa idea. Pero puedo vivir contigo haciendo eso ;-)
+%s
de la segunda mitad
age() { echo $(( $(date +%s) - $(date -r "$1" +%s) )); }
(¡Gracias a @Grizly por la corrección!)
noatime
opción (lo cual es bueno para el rendimiento, por lo que debe usarlo). Así que usa en %X
lugar de %Y
.
Encontrar uno es bueno, pero creo que puede usarlo de otra manera, especialmente si necesita saber cuántos segundos es el archivo antiguo.
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
usando la fecha GNU
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
Puede ver aquí las tres fechas para acceder / modificar / cambiar. No hay fecha de creación. Solo puede estar realmente seguro cuando se modificó el contenido del archivo (el campo "modificar") o se cambió su inodo (el campo "cambiar").
Ejemplos de cuándo se actualizan ambos campos:
"Modificar" se actualizará si alguien concatena información adicional al final del archivo.
"Cambiar" se actualizará si alguien cambia los permisos a través de chmod.