Script de Unix: espere hasta que exista un archivo

11

Necesito un script que espere a que aparezca un (archivo de ejemplo.txt) en el directorio / tmp

y una vez que se encuentra para detener el programa, de lo contrario, suspender el archivo hasta que se encuentre

Hasta ahora tengo:

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

entonces

Cidricc
fuente

Respuestas:

16

Esta función bash se bloqueará hasta que aparezca el archivo dado o se alcance un tiempo de espera determinado. El estado de salida será 0 si el archivo existe; si no es así, el estado de salida reflejará cuántos segundos ha esperado la función.

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

Y así es como puedes 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
}

Otro ejemplo:

# Use the default timeout of 10 seconds:
wait_file "/tmp/examplefile.txt" && {
  echo "File found."
}
Elifarley
fuente
12
until [ -f /tmp/examplefile.txt ]
do
     sleep 5
done
echo "File found"
exit

Cada 5 segundos se despertará y buscará el archivo. Cuando aparezca el archivo, saldrá del bucle, le indicará que encontró el archivo y saldrá (no es obligatorio, pero está ordenado).

Ponga eso en un script y comience como script &

Eso lo ejecutará en segundo plano.

Puede haber diferencias sutiles en la sintaxis dependiendo del shell que use. Pero eso es lo esencial.

Jeff Dodd
fuente