Unix Script: attendere fino a quando esiste un file


11

Ho bisogno di uno script che attenda che un (esempiofile.txt) appaia nella directory / tmp

e una volta trovato per fermare il programma, altrimenti per dormire il file fino a quando non si trova

Finora ho:

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

poi

Risposte:


16

Questa funzione bash si bloccherà fino alla visualizzazione del file specificato o al raggiungimento di un determinato timeout. Lo stato di uscita sarà 0 se il file esiste; in caso contrario, lo stato di uscita rifletterà per quanti secondi la funzione ha atteso.

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))
}

Ed ecco come puoi usarlo:

# 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 altro esempio:

# 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

Ogni 5 secondi si sveglia e cerca il file. Quando appare il file, uscirà dal ciclo, ti dirà che ha trovato il file e uscirà (non richiesto, ma ordinato).

Inseriscilo in uno script e avvialo come script

Ciò lo eseguirà in background.

Potrebbero esserci sottili differenze nella sintassi a seconda della shell utilizzata. Ma questo è il senso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.