Je veux vérifier dans linux bash si un fichier a été créé il y a plus de x fois.
supposons que le fichier s'appelle text.txt et qu'il dure 2 heures.
if [ what? ]
then
echo "old enough"
fi
Seulement pour le temps de modification
if test `find "text.txt" -mmin +120`
then
echo old enough
fi
Ou le même en 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'accès. 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 aussi faire touch --date '2015-10-10 9:55' /tmp/file
pour obtenir un temps extrêmement précis avec une date/heure arbitraire.
En utilisant stat
pour déterminer la date de dernière modification du fichier, date
pour connaître l'heure actuelle et une utilisation généreuse des bashismes, vous pouvez effectuer le test souhaité en fonction du fichier. heure de dernière modification1.
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’approche find
, je pense que c’est une meilleure approche que de lancer find
pour examiner un fichier que vous avez déjà "trouvé". En outre, la manipulation de la date est amusant ;-)
%Z
au lieu de %Y
ci-dessous pour obtenir le "changement de temps" qui peut être ce que vous voulez.[Mise à jour]
Pour les utilisateurs de mac, utilisez stat -f "%m" $somefile
au lieu de la syntaxe spécifique à Linux ci-dessus
L'heure de création n'est pas enregistrée.
Trois horodatages sont stockés (généralement, ils peuvent être désactivés sur certains systèmes de fichiers ou par certaines options du système de fichiers):
un "changement" dans le fichier est considéré comme une modification d'autorisation, un changement de nom, etc. Bien que la modification concerne uniquement le contenu.
Bien que ctime ne soit pas techniquement le temps de la création, il l'est assez souvent.
Depuis ctime, il n’est pas affecté par les modifications apportées au contenu du fichier. Il est généralement mis à jour uniquement lors de la création du fichier. 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 en même temps que vous déposez le fichier là-bas.
Personnellement, j'utilise toujours mtime pour tout, et j'imagine que c'est ce que vous voulez. Quoi qu'il en soit, voici un résumé de la bash "peu attrayante" de Guss, dans une fonction facile à utiliser.
#!/bin/bash fonction age () { nomfichier local = $ 1 local modifié = `stat -c% Y" $ nomfichier "` local maintenant = `date +% s` local écoulé laisser écoulé = maintenant modifié echo $ écoulé } file = "/" echo L'âge de $ fichier est $ (age "$ fichier") secondes.
La recherche est bonne mais je pense que vous pouvez utiliser une autre manière, surtout si vous devez maintenant combien de secondes le fichier est vieux
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
en utilisant GNU date
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 être vraiment sûr que du moment où le contenu du fichier a été modifié (le champ "modifier") ou de son inode modifié (le champ "changer").
Exemples de mise à jour des deux champs:
"Modifier" sera mis à jour si quelqu'un concatène des informations supplémentaires à la fin du fichier.
"Change" sera mis à jour si quelqu'un a changé les permissions via chmod.