GNU/Linux >> Linux Esercitazione >  >> Linux

Trova l'età del file più vecchio in una riga o restituisci zero?

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 variabile d
    • BEGIN {m=d} inizializza m a d
    • $0 < m {m = $0} tenendo traccia del minimo in m
    • END {print d - m} stampa la differenza.

Linux
  1. Come trovare il file più vecchio in un albero di directory in Linux

  2. Come scorrere le righe di un file?

  3. Trova l'URL di un file

  4. Trova la versione di WordPress dalla riga di comando

  5. Converti i finali di riga Unix in Windows

Visualizza il contenuto di un file nella riga di comando di Linux

Come trovare le righe più lunghe in un file in Linux

Codificare il contenuto del file e farlo eco come una riga?

Trova la riga di comando?

Come trovo la posizione MySQL my.cnf

Come trovare il file manager predefinito?