cómo utilizar el script de shell para comprobar la hora del último cambio de un archivo

StackOverflow https://stackoverflow.com/questions/1207052

  •  05-07-2019
  •  | 
  •  

Pregunta

Quiero saber si ciertos archivos se cambiaron en los últimos tres minutos para poder decidir si el cp tuvo éxito, y si debería exit o continuar el guión.¿Cómo puedo hacer eso?

Gracias

¿Fue útil?

Solución

Puede obtener la hora de la última modificación de un archivo con stat, y la fecha actual con date.Puede usar cadenas de formato para ambos para obtenerlas en "segundos desde la época":

current=`date +%s`
last_modified=`stat -c "%Y" $file`

Entonces, es bastante fácil poner eso en condiciones.Por ejemplo:

if [ $(($current-$last_modified)) -gt 180 ]; then 
     echo "old"; 
else 
     echo "new"; 
fi

Otros consejos

La sintaxis de esta declaración if depende de su shell particular, pero los comandos de fecha no. Yo uso bash; modificar según sea necesario.

if [ $(( $(date +%s) - $(date +%s -r <file>) )) -le 180 ]; then
    # was modified in last three minutes
else
    # was not modified in last three minutes
fi

El +%s le dice a la fecha que genere un tiempo UNIX (lo importante es que es un número entero en segundos). También puede usar stat para obtener esta información: el comando stat -c %Y <file> es equivalente. Asegúrese de utilizar %Y no %y, de modo que obtenga un tiempo útil en segundos.

El comando stat le dará la última hora de modificación

stat -c %y <filename>

Buscar puede generar el nombre del archivo si se ha modificado en los últimos 3 minutos.

find file1 -maxdepth 0 -mmin -3

Un cambio de marca de tiempo de archivo no implica que haya copiado correctamente.
Si aterriza corrompiendo el archivo o el sistema de archivos se queda sin espacio,
probablemente todavía verá un cambio de marca de tiempo (necesita confirmar eso).

No entiendo el contexto exacto de su requerimiento.
Si dispara un cp, se completa y regresa, no regresa mientras está funcionando.
Entonces, ¿no es el retorno (con código de salida de éxito) un buen indicador de éxito?

¿Cómo y por qué saldría en parte dentro de una operación <=>?
O bien, ¿se trata de un script por lotes <=> que recorre la lista de archivos ...
alguna elaboración ayudaría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top