Quiero comprobar en linux bash si un archivo se creó hace más de x veces.
digamos que el archivo se llama text.txt y el tiempo es de 2 horas.
if [ what? ]
then
echo "old enough"
fi
linux
bash
command-line
flybywire
fuente
fuente

finddevolvió un valor distinto de cero cuando no se encontraron coincidencias.text.txtse presume que no es un directorio.[ "$(find path/to/file -mmin +120)" ] && echo "it is old"Siempre me gustó usar
date -r /the/file +%spara encontrar su edad.También puede hacer
touch --date '2015-10-10 9:55' /tmp/filepara obtener una hora extremadamente precisa en una fecha / hora arbitraria.fuente
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
statpara averiguar la fecha de la última modificación del archivo,datepara 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 .Si bien el código es un poco menos legible que el
findenfoque, creo que es un enfoque mejor que ejecutarlofindpara ver un archivo que ya "encontró". Además, la manipulación de fechas es divertida ;-)%Zlugar de a%Ycontinuación para obtener el "tiempo de cambio", que puede ser el que desee.[Actualizar]
Para usuarios de mac, use en
stat -f "%m" $somefilelugar de la sintaxis específica de Linux anteriorfuente
statno 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.
fuente
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.fuente
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 ;-)+%sde la segunda mitadage() { echo $(( $(date +%s) - $(date -r "$1" +%s) )); }(¡Gracias a @Grizly por la corrección!)noatimeopción (lo cual es bueno para el rendimiento, por lo que debe usarlo). Así que usa en%Xlugar 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" +%susando la fecha GNU
fuente
Considere el resultado de la herramienta 'stat':
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.
fuente
yo suelo
fuente