Quiero encontrar la antigüedad del archivo más antiguo en un directorio determinado o devolver 0 si no hay ningún archivo en este directorio. También necesito un comando de una línea para hacerlo. Hasta ahora, este es mi comando para encontrar la edad en segundos del archivo más antiguo en el directorio:
expr $(($(date +%s) - $(stat -c %Y $(ls -lt /path/to/dir/ | tail -1 | awk '{print $NF}'))))
El problema es que si no hay archivos devuelve el siguiente error:
$ expr $(($(date +%s) - $(stat -c %Y $(ls -lt /path/to/dir/ | tail -1 | awk '{print $NF}'))))
stat: cannot stat ‘0’: No such file or directory
-bash: 1554373460 - : syntax error: operand expected (error token is "- ")
Entonces, en este caso, quiero que el comando devuelva solo 0 y suprima la impresión de error.
Respuesta aceptada:
Si debe ser una línea:
stat -c %Y ./* 2>/dev/null | awk -v d="$(date +%s)" 'BEGIN {m=d} $0 < m {m = $0} END {print d - m}'
stat -c %Y ./* 2>/dev/null
imprima la marca de tiempo de todos los archivos, ignorando los errores (por lo que si no hay archivos, no habrá salida)-
Con awk:
-v d="$(date +%s)"
guardar la marca de tiempo actual en una variabled
BEGIN {m=d}
inicializarm
ad
$0 < m {m = $0}
haciendo un seguimiento del mínimo enm
END {print d - m}
imprime la diferencia.