stat
peut vous donner cette information :
filemtime=$(stat -c %Y myfile.txt)
%Y
vous donne la dernière modification en "secondes depuis The Epoch", mais il y a beaucoup d'autres options ; Plus d'informations. Donc, si le fichier a été modifié le 2011-01-22 à 15h30 GMT, ce qui précède renverrait un nombre dans la région de 1295710237.
Modifier :Ah, vous voulez le temps en jours depuis qu'il a été modifié. Cela va être plus compliqué, notamment parce qu'un "jour" n'est pas une période de temps fixe (certains "jours" n'ont que 23 heures, d'autres 25 - grâce à l'heure d'été).
Le naïf la version pourrait ressembler à ceci :
filemtime=$(stat -c %Y "$1")
currtime=$(date +%s)
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff
... mais encore une fois, cela suppose qu'une journée dure toujours exactement 86 400 secondes.
Plus d'informations sur l'arithmétique en bash ici.
AGE=$(perl -e 'print -M $ARGV[0]' $file)
définira $AGE sur l'âge de $file en jours, comme le -M
de Perl l'opérateur gère le stat
appel et la conversion en jours pour vous.
La valeur de retour est une valeur à virgule flottante (par exemple, 6,62849537 jours). Ajouter un int
à l'expression si vous avez besoin d'un résultat entier
AGE=$(perl -e 'print int -M $ARGV[0]' $file)
Ruby et Python ont également leurs one-liners pour stat un fichier et renvoyer des données, mais je pense que Perl a le moyen le plus concis.
L'utilitaire de date dispose d'un commutateur pratique pour extraire le mtime d'un fichier, que vous pouvez ensuite afficher ou stocker à l'aide d'une chaîne de format.
date -r file "+%F"
# 2021-01-12
file_mtime=$(date -r file "+%F")
Voir man date
, la sortie de date est contrôlée par une chaîne de format commençant par "+"
Les chaînes de format utiles pour comparer plusieurs dates peuvent inclure :
"+%j": day of year
"+%s": unix epoch time
L'arithmétique avec les dates est un peu pénible, donc si vous avez besoin d'un temps relatif qui fonctionnera dans tous les cas, vous feriez peut-être mieux d'utiliser une autre langue.