Unix Script: подождите, пока файл не появится

13

Мне нужен скрипт, который будет ожидать появления (examplefile.txt) в каталоге / tmp

и как только он найден, чтобы остановить программу, в противном случае, чтобы спит файл, пока он не будет найден

Пока что у меня есть:

если [ ! -f /tmp/examplefile.txt]

тогда

Cidricc
источник

Ответы:

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."
}
Elifarley
источник
Более точный способ рассчитать время ожидания может быть: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 секунд он просыпается и ищет файл. Когда файл появится, он выпадет из цикла, сообщит, что нашел файл и завершит работу (не обязательно, но аккуратно).

Поместите это в скрипт и запустите как скрипт

Это будет работать в фоновом режиме.

Там могут быть тонкие различия в синтаксисе в зависимости от используемой оболочки. Но это суть этого.

Джефф Додд
источник