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

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."
}

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.