Je veux vérifier dans linux bash si un fichier a été créé il y a plus de x fois.
Disons que le fichier s’appelle text.txt et que l’heure est 2 heures.
if [ what? ] then echo "old enough" fi
Seulement pour l’heure de modification
if test `find "text.txt" -mmin +120` then echo old enough fi
Ou même dans une ligne:
#!/bin/bash find text.txt -mmin +120 -exec echo "old enough" \;
Vous pouvez utiliser -cmin
pour le changement ou -amin
pour le temps d’access. Comme d’autres l’ont souligné, je ne pense pas que vous puissiez suivre le temps de création.
J’ai toujours aimé utiliser date -r /the/file +%s
pour trouver son âge.
Vous pouvez également faire touch --date '2015-10-10 9:55' /tmp/file
pour obtenir une heure extrêmement fine sur une date / heure arbitraire.
L’heure de création n’est pas stocké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 comptabilisée comme modification, renommage, etc. Si la modification concerne uniquement le contenu.
En utilisant la stat
pour déterminer la date de la dernière modification du fichier, la date
pour déterminer l’heure actuelle et une utilisation généralisée des sommaires, on peut effectuer le test souhaité en fonction de l’heure de dernière modification du fichier 1 .
if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then echo "$somefile is older then 2 hours" fi
Alors que le code est un peu moins lisible que l’approche find
, je pense que c’est une meilleure approche que de lancer find
pour regarder un fichier que vous avez déjà trouvé. En outre, la manipulation des dates est amusante 😉
%Z
au lieu de %Y
ci-dessous pour obtenir “l’heure du changement” qui peut être ce que vous voulez. [Mettre à jour]
Pour les utilisateurs de Mac, utilisez stat -f "%m" $somefile
au lieu de la syntaxe spécifique à Linux ci-dessus
Bien que ctime ne soit pas techniquement le moment de la création, c’est souvent le cas.
Comme ctime n’est pas affecté par les modifications apscopes au contenu du fichier, il n’est généralement mis à jour que lorsque le fichier est créé. Et oui – je peux vous entendre tous crier – il est également mis à jour si vous modifiez les droits d’access ou la propriété… mais en général, c’est quelque chose qui est fait une fois, généralement en même temps que vous placez le fichier.
Personnellement, j’utilise toujours mtime pour tout, et j’imagine que c’est ce que vous voulez. Mais de toute façon, voici un résumé du “non-attractif” bash de Guss, dans une fonction facile à utiliser.
#! / bin / bash fonction age () { nom de fichier local = 1 $ local changé = `stat -c% Y" $ filename "` local now = `date +% s` local écoulé laisser s'écouler = maintenant changé echo $ écoulé } file = "/" echo L'âge de $ file est $ (age "$ file") secondes.
La trouvaille est bonne mais je pense que vous pouvez utiliser une autre manière, surtout si vous avez besoin maintenant de combien de secondes le fichier est vieux
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
en utilisant la date GNU
Considérons 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 d’access / modification / modification. 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 été modifié (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 modifié les permissions via chmod.