유닉스 스크립트 : 파일이 존재할 때까지 기다립니다


13

/ tmp 디렉토리에 (examplefile.txt)가 나타날 때까지 기다리는 스크립트가 필요합니다.

프로그램을 중지 한 것으로 확인되면 파일을 찾을 때까지 잠자기합니다.

지금까지 나는 :

만약 [ ! -f /tmp/examplefile.txt]

그때

답변:


17

이 bash 함수는 주어진 파일이 나타나거나 주어진 시간이 초과 될 때까지 차단됩니다. 파일이 존재하면 종료 상태는 0이됩니다. 그렇지 않으면 종료 상태는 함수가 몇 초 동안 대기했는지를 나타냅니다.

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

사용 방법은 다음과 같습니다.

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

또 다른 예:

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

시간 초과를 계산하는보다 정확한 방법은 다음과 같습니다.start=`date +%s`; while (( `date +%s` - start > 10 )); do sleep 1; done
x-yuri

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

5 초마다 깨어나 파일을 찾습니다. 파일이 나타나면 루프에서 빠져 나와 파일을 찾았다 고 말하고 종료합니다 (필요하지는 않지만 깔끔함).

스크립트에 넣고 스크립트로 시작하십시오.

백그라운드에서 실행됩니다.

사용하는 쉘에 따라 구문에 약간의 차이가있을 수 있습니다. 그러나 그것은 그것의 요지입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.