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 la durée est de 2 heures.
if [ what? ]
then
echo "old enough"
fi
linux
bash
command-line
flybywire
la source
la source
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.la source
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 .Bien que le code soit un peu moins lisible que l'
find
approche, je pense que c'est une meilleure approche que de courirfind
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-dessusla source
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.
la source
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.
la source
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 miage() { 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
la source
Considérez le résultat de l'outil 'stat':
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.
la source
j'utilise
la source