Unix Script: Зачекайте, поки файл існує


13

Мені потрібен скрипт, який буде чекати появи (examplefile.txt) в каталозі / tmp

і як тільки буде знайдено, щоб зупинити програму, інакше спати файл, поки він не знаходиться

Поки що я маю:

якщо [! -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 секунд він прокинеться і шукатиме файл. Коли файл з’явиться, він випаде з циклу, скаже вам, що знайшов файл і вийшов (не потрібно, але охайно.)

Помістіть це в сценарій і запустіть його як script &

Це запустить його у фоновому режимі.

Можуть бути незначні відмінності в синтаксисі залежно від оболонки, яку ви використовуєте. Але в цьому суть.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.