Voglio trovare l'età del file più vecchio in una determinata directory o restituire 0 se non ci sono file in questa directory. Ho anche bisogno di un comando a una riga per farlo. Finora questo è il mio comando per trovare l'età in secondi del file più vecchio nella directory:
expr $(($(date +%s) - $(stat -c %Y $(ls -lt /path/to/dir/ | tail -1 | awk '{print $NF}'))))
Il problema è che se non ci sono file restituisce il seguente errore:
$ 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 "- ")
Quindi in questo caso voglio che il comando restituisca solo 0 e sopprima la stampa dell'errore.
Risposta accettata:
Se deve essere una riga:
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
stampa il timestamp di tutti i file, ignorando gli errori (quindi nessun file genera alcun output)-
Con awk:
-v d="$(date +%s)"
salva il timestamp corrente in una variabiled
BEGIN {m=d}
inizializzam
ad
$0 < m {m = $0}
tenendo traccia del minimo inm
END {print d - m}
stampa la differenza.