Unix 脚本:等待文件存在

Unix 脚本:等待文件存在

我需要一个脚本来等待(examplefile.txt)出现在/tmp目录中

一旦找到就停止程序,否则让文件休眠直到找到它

到目前为止我已经:

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

then

答案1

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

信息:使用-d而不是-f检查目录,或者-e检查文件或目录。

每 5 秒它就会被唤醒并查找文件。当文件出现时,它会退出循环,告诉你它找到了文件并退出(不是必需的,但很整洁。)

将其放入脚本并将其作为脚本启动 &

它将在后台运行。

根据您使用的 shell,语法可能会有细微的差别。但这就是它的要点。

答案2

尝试这个 shell 函数:

# Block until the given file appears or the given timeout is reached.
# Exit status is 0 iff the file exists.
wait_file() {
  local file="$1"; shift
  local wait_seconds="${1:-10}"; shift # 10 seconds as default timeout
  test $wait_seconds -lt 1 && echo 'At least 1 second is required' && return 1

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

  test $wait_seconds -ge 0 # equivalent: let ++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 5 seconds: '$server_log'"
  exit 1
}

另一个例子:

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

相关内容