Script Unix: Attendez qu'un fichier existe


11

J'ai besoin d'un script qui attendra qu'un (exemplefichier.txt) apparaisse dans le répertoire / tmp

et une fois qu'il a été trouvé pour arrêter le programme, sinon pour mettre le fichier en veille jusqu'à ce qu'il soit localisé

Jusqu'à présent, j'ai:

si [ ! -f /tmp/examplefile.txt]

puis

Réponses:


16

Cette fonction bash se bloquera jusqu'à ce que le fichier donné apparaisse ou qu'un délai donné soit atteint. Le statut de sortie sera 0 si le fichier existe; si ce n'est pas le cas, l'état de sortie reflétera combien de secondes la fonction a attendu.

wait_file() {
  local file="$1"; shift
  local wait_seconds="${1:-10}"; shift # 10 seconds as default timeout

  until test $((wait_seconds--)) -eq 0 -o -f "$file" ; do sleep 1; done

  ((++wait_seconds))
}

Et voici comment vous pouvez l'utiliser:

# Wait at most 5 seconds for the server.log file to appear

server_log=/var/log/jboss/server.log

wait_file "$server_log" 5 || {
  echo "JBoss log file missing after waiting for $? seconds: '$server_log'"
  exit 1
}

Un autre exemple:

# Use the default timeout of 10 seconds:
wait_file "/tmp/examplefile.txt" && {
  echo "File found."
}

12
until [ -f /tmp/examplefile.txt ]
do
     sleep 5
done
echo "File found"
exit

Toutes les 5 secondes, il se réveille et recherche le fichier. Lorsque le fichier apparaît, il sortira de la boucle, vous dira qu'il a trouvé le fichier et quitter (non requis, mais bien rangé.)

Mettez cela dans un script et démarrez-le en tant que script &

Cela l'exécutera en arrière-plan.

Il peut y avoir de subtiles différences de syntaxe selon le shell que vous utilisez. Mais c'est l'essentiel.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.