Je veux trouver l'âge du fichier le plus ancien dans un certain répertoire ou retourner 0 s'il n'y a aucun fichier dans ce répertoire. J'ai aussi besoin d'une commande en une ligne pour le faire. Jusqu'à présent, voici ma commande pour trouver l'âge en secondes du fichier le plus ancien du répertoire :
expr $(($(date +%s) - $(stat -c %Y $(ls -lt /path/to/dir/ | tail -1 | awk '{print $NF}'))))
Le problème est que s'il n'y a pas de fichiers, il renvoie l'erreur suivante :
$ 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 "- ")
Donc, dans ce cas, je veux que la commande renvoie uniquement 0 et supprime l'impression d'erreur.
Réponse acceptée :
S'il doit s'agir d'une seule ligne :
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
imprimer l'horodatage de tous les fichiers, en ignorant les erreurs (donc aucun fichier n'entraîne aucune sortie)-
Avec awk :
-v d="$(date +%s)"
enregistrer l'horodatage courant dans une variabled
BEGIN {m=d}
initialiserm
àd
$0 < m {m = $0}
garder une trace du minimum enm
END {print d - m}
imprimer la différence.