Réponses:
Seulement pour le temps de modification
if test `find "text.txt" -mmin +120`
then
echo old enough
fi
Vous pouvez utiliser -cmin
pour le changement ou -amin
pour le temps d'accès. Comme d'autres l'ont souligné, je ne pense pas que vous puissiez suivre le temps de création.
find
retourné non nul quand aucune correspondance n'est trouvée.
text.txt
est présumé ne pas être un annuaire.
[ "$(find path/to/file -mmin +120)" ] && echo "it is old"
J'ai toujours aimé l'utiliser date -r /the/file +%s
pour retrouver son âge.
Vous pouvez également faire touch --date '2015-10-10 9:55' /tmp/file
pour obtenir une heure extrêmement fine à une date / heure arbitraire.
let AGE=$(($(date +%s)-$(date -r /path/to/file +%s)))
[avec l'hypothèse que créé et jamais modifié, ou "âge relatif au mod"]
function file-age { FILE_CREATED_TIME=`date -r "$1" +%s`; TIME_NOW=`date +%s`; echo "$[ ${TIME_NOW} - ${FILE_CREATED_TIME} ]"; }
$[ ]
est, sinon obsolète , au moins ancienne et moins portable , et il faut utiliser à la $(( ))
place; et les contre-citations sont plus fragiles que $( )
; et les traits d'union dans les noms de fonction peuvent ne pas être entièrement portables. L'essence est bonne, cependant!
En utilisant stat
pour déterminer la date de la dernière modification du fichier, date
pour déterminer l'heure actuelle et une utilisation libérale des bashismes, on peut faire le test que vous voulez en fonction de la dernière heure de modification du fichier 1 .
if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
echo "$somefile is older then 2 hours"
fi
Bien que le code soit un peu moins lisible que l' find
approche, je pense que c'est une meilleure approche que de courir find
pour regarder un fichier que vous avez déjà "trouvé". De plus, la manipulation des dates est amusante ;-)
%Z
place de %Y
ci - dessous pour obtenir "l'heure de changement" qui peut être ce que vous voulez.[Mettre à jour]
Pour les utilisateurs de Mac, utilisez à la stat -f "%m" $somefile
place de la syntaxe spécifique à Linux ci-dessus
stat
n'est pas intégré - très mauvais de ma part, je vais réparer.
L'heure de création n'est pas enregistrée.
Ce qui est stocké sont trois horodatages (généralement, ils peuvent être désactivés sur certains systèmes de fichiers ou par certaines options du système de fichiers):
une «modification» du fichier est comptée comme des modifications d'autorisation, un changement de nom, etc. Alors que la modification ne concerne que le contenu.
Bien que ctime ne soit pas techniquement le moment de la création, il l'est assez souvent.
Comme ctime il n'est pas affecté par les modifications apportées au contenu du fichier, il n'est généralement mis à jour que lorsque le fichier est créé. Et oui - je vous entends tous crier - il est également mis à jour si vous modifiez les autorisations d'accès ou la propriété ... mais généralement c'est quelque chose qui est fait une fois, généralement au moment où vous placez le fichier là-bas.
Personnellement, j'utilise toujours mtime pour tout, et j'imagine que c'est ce que vous voulez. Mais quoi qu'il en soit ... voici une refonte de la bash "peu attrayante" de Guss, dans une fonction facile à utiliser.
#! / bin / bash function age () { nom de fichier local = 1 $ local changé = `stat -c% Y" $ filename "` local now = `date +% s` local écoulé laissez écoulé = maintenant changé echo $ écoulé } fichier = "/" echo L'âge de $ file est de $ (age "$ file") secondes.
local changed=$(perl -MFile::stat -e "print stat(\"${filename}\")->mtime")
superuser.com/questions/427551/...
chmod
, appliqué sur le fichier, annulera cette idée. Mais je peux vivre avec toi en faisant ça ;-)
+%s
de la seconde mi
age() { echo $(( $(date +%s) - $(date -r "$1" +%s) )); }
(Merci à @Grizly pour la correction!)
noatime
option (ce qui est bon pour les performances, vous devriez donc l'utiliser). Alors utilisez simplement à la %X
place de %Y
.
La recherche est bonne mais je pense que vous pouvez utiliser une autre méthode, surtout si vous avez besoin de combien de secondes est le fichier ancien
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
en utilisant la date GNU
Considérez le résultat de l'outil 'stat':
File: `infolog.txt'
Size: 694 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 11635578 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ fdr) Gid: ( 1000/ fdr)
Access: 2009-01-01 22:04:15.000000000 -0800
Modify: 2009-01-01 22:05:05.000000000 -0800
Change: 2009-01-01 22:05:05.000000000 -0800
Vous pouvez voir ici les trois dates pour l'accès / modifier / changer. Il n'y a pas de date de création. Vous ne pouvez vraiment être sûr que lorsque le contenu du fichier a été modifié (le champ «modifier») ou que son inode a changé (le champ «modifier»).
Exemples de mise à jour des deux champs:
"Modifier" sera mis à jour si quelqu'un a concaténé des informations supplémentaires à la fin du fichier.
"Change" sera mis à jour si quelqu'un a changé les permissions via chmod.