Comment obtenir du temps depuis la dernière modification du fichier en quelques secondes avec bash?

Je dois obtenir le temps en secondes depuis la dernière modification d’un fichier. ls -l ne le montre pas.

L’implémentation GNU de date a une option -r pour imprimer la date de dernière modification d’un fichier au lieu de la date actuelle. Et nous pouvons utiliser le spécificateur de format %s pour obtenir le temps en secondes, ce qui est pratique pour calculer les différences de temps.

 lastModificationSeconds=$(date +%s -r file.txt) currentSeconds=$(date +%s) 

Et puis, vous pouvez utiliser le contexte arithmétique pour calculer la différence, par exemple:

 ((elapsedSeconds = currentSeconds - lastModificationSeconds)) # or elapsedSeconds=$((currentSeconds - lastModificationSeconds)) 

Vous pouvez également calculer et imprimer directement les secondes écastings sans variables temporaires:

 echo $(($(date +%s) - $(date +%s -r file.txt))) 

Malheureusement, l’implémentation BSD de date (par exemple sous Mac OS X) ne prend pas en charge l’indicateur -r . Pour obtenir les dernières secondes de modification, vous pouvez utiliser la commande stat place des autres réponses suggérées. Une fois que vous avez cela, le rest de la procédure est la même pour calculer les secondes écastings.

Je sais que le tag est Linux, mais la syntaxe stat -c ne fonctionne pas pour moi sur OSX. Cela fonctionne …

 echo $(( $(date +%s) - $(stat -f%c myfile.txt) )) 

Et comme fonction à appeler avec le nom de fichier:

 lastmod(){ echo "Last modified" $(( $(date +%s) - $(stat -f%c "$1") )) "seconds ago" } 

Dans BASH, utilisez ceci pour les secondes depuis la dernière modification:

  expr `date +%s` - `stat -c %Y /home/user/my_file`