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

2

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, il faudrait que je fasse quelque chose. Comment puis-je faire cela dans un script?

J'ai essayé ceci:

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

Quelles seront les commandes que je dois utiliser?

user
la source
sleep 5h; yourcommand.
davidbaumann
@davidbaumann cela devrait être en réponse pas en commentaire.
Francisco Tapia
Désolé, je n'ai pas eu le temps de répondre avec des explications.
davidbaumann

Réponses:

4

Le script 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, vous pouvez vous déconnecter ou interrompre la session ssh à partir de laquelle vous exécutez le programme. scénario.

Le moyen le plus simple de s’assurer simultanément de tous ces événements est d’utiliser le à commande pour exécuter en avant la deuxième vérification. Ainsi, je suggère 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 Executable Script) qui vérifie l'existence du fichier sample.txt et, s’il n’existe pas, prend les mesures appropriées en sachant que le laps de temps de 5h est déjà écoulé.

Je comprends que la plupart des gens ne connaissent pas le à l'heure actuelle + 5 heures format de à invocation, vous pouvez le trouver détaillé ici .

Ce qui précède survivra aux redémarrages, aux déconnexions et aux déconnexions.

EDIT: le à Cette commande est particulièrement utile car elle utilise votre environnement, pas les racines . Aussi, gardez à l'esprit que à utilise le shell standard Bourne sh , pas le shell Bourne-again frapper . Ainsi, dans le she-bang du fichier / home / Savio / ExecutableScript, assurez-vous de spécifier explicitement le shell bash pour qu'il fonctionne comme vous le souhaitez.

MariusMatutiae
la source
2

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 que vous recherchez, il peut être modifié pour rechercher d'autres fichiers.

Le test if [ ! -f $FILE ] Utilisez le -f paramètre qui est "Test si le fichier existe".

Et le délai dont vous avez besoin est mis en œuvre 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é en secondes mais vous pouvez également utiliser les suffixes. s, m, h et d pour définir le temps en secondes, minutes, heures ou jours.

MODIFIER : 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.

statox
la source
1
Je n'ai pas assez de réputation pour commenter sa réponse, alors je vais le faire ici: La réponse de @MariusMatutiae est bien plus robuste et l'utilisation de at now C'est plutôt cool, je ne le savais pas. OP devrait accepter cette réponse.
statox
@ startox votre réponse est correcte, l'utilisateur n'a pas posé de question sur la commande persistante afin que votre script résolve sa question.
Francisco Tapia
2
@Francisco en effet ma réponse résout le problème mais je trouve sa solution plus élégante puisqu'elle couvre plus de scénarios sans introduire d'inconvénient :) Cela étant dit, OP est libre d'utiliser la solution qu'elle juge la plus appropriée à sa situation.
statox