Unix脚本:等待文件存在


13

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

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

到目前为止,我有:

如果[!-f /tmp/examplefile.txt]

然后

Answers:


17

该bash函数将一直阻塞,直到出现给定的文件或达到给定的超时为止。如果文件存在,则退出状态为0;否则,退出状态为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秒钟它将醒来并查找文件。当文件出现时,它将退出循环,告诉您找到文件并退出(不是必需的,但要整洁)。

将其放入脚本并以脚本启动,

它将在后台运行。

取决于您使用的shell,语法上可能会有细微的差异。但这就是要旨。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.