2 votes

Comment vérifier si un fichier existe après un intervalle de temps spécifique ?

Je veux vérifier si un répertoire contient un fichier (par exemple sample.txt). S'il ne contient pas ce fichier dans 5 heures, alors je devrais effectuer une action. Comment puis-je faire cela dans un script ?

J'ai essayé ça :

if=$(find /home/Savio/Dsktop/check -type f -Sample.txt "*.txt") )

Quelles seront les commandes que je devrai utiliser ?

4voto

MariusMatutiae Points 45233

Le Shell Shell ci-dessus suggéré par statox est bien sûr correct, mais il ne tient pas compte du fait que l'ordinateur peut tomber en panne entre les deux vérifications, ou que vous pouvez vous déconnecter, ou que vous pouvez interrompre la session ssh à partir de laquelle vous exécutez le Shell.

Le moyen le plus simple de se prémunir contre tous ces événements simultanément est d'utiliser la fonction à l'adresse d'exécuter en avant dans le temps le deuxième contrôle. Je suggère donc que le script ci-dessus soit modifié comme suit :

 #!/bin/bash
 FILE=/home/Savio/Dsktop/check/sample.txt    
 if [ -f $FILE ]
 then
        #Do what you want if file exists
 else
        at now + 5 hours /home/Savio/ExecutableScript
 fi

/home/Savio/ExecutableScript est un script exécutable (*chmod 755 ExecutableScript) qui vérifie l'exitence du fichier échantillon.txt et, s'il n'existe pas, prend les mesures appropriées sachant que le délai de 5 heures a déjà expiré.

Je comprends que la plupart des gens ne sont pas familiers avec le à présent + 5 heures format de à l'adresse l'invocation, vous pouvez le trouver détaillé aquí .

Les éléments ci-dessus survivront aux redémarrages, aux déconnexions et aux déconnexions.

EDIT : le à l'adresse est particulièrement utile car elle utilise votre environnement, pas de la racine . N'oubliez pas non plus que à l'adresse utilise le standard Bourne Shell. sh et non le Bourne-again Shell. bash . Ainsi, dans le she-bang du fichier /home/Savio/ExecutableScript, assurez-vous de spécifier le bash Shell explicitement, pour qu'il fonctionne comme vous l'attendez.

2voto

statox Points 149

Vous pourriez utiliser quelque chose comme ça

#!/bin/bash
FILE=/home/Savio/Dsktop/check/sample.txt    
if [ -f $FILE ]
then
    #Do what you want if file exists
else
    sleep 5h
    if [ ! -f $FILE ]
    then
        #Do what you want if the file still doesn't exists
    fi
fi

La variable $FILE contient le chemin du fichier recherché, il peut être modifié pour rechercher d'autres fichiers.

Le test if [ ! -f $FILE ] utiliser le -f qui est "Tester si le fichier existe".

Et le délai dont vous avez besoin est implémenté avec sleep 5h . Sleep permet de mettre en pause un script. Si vous ne fournissez pas de suffixe après le nombre, le temps est interprété comme des secondes, mais vous pouvez également utiliser les suffixes suivants s , m , h y d pour régler l'heure en secondes, minutes, heures ou jours.

EDIT : Le problème de cette méthode est qu'elle ne survivra pas à un redémarrage ou une déconnexion, voir la réponse de @MariusMatutiae pour une solution plus robuste.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X