4

ファイルがその場所に到着するまで 1 時間ポーリングし続けたいと思います。

私のディレクトリ:/home/stage

ファイル名(探しているもの) :abc.txt

ディレクトリを1時間ポーリングし続けたいのですが、ファイルが到着した/home/stage場合は1時間以内にポーリングを停止し、メッセージを表示する必要があります。abc.txtfile arrivedfile has not arrived

Unixでこれを達成する方法はありますか?

4

5 に答える 5

14

bashより大きなスコープがすでに他の目的でそれらを使用している場合に備えて、トラップハンドラーとシグナルに依存しない別の方法:

#!/bin/bash
interval=60
((end_time=${SECONDS}+3600))

directory=${HOME}
file=abc.txt

while ((${SECONDS} < ${end_time}))
do
  if [[ -r ${directory}/${file} ]]
  then
    echo "File has arrived."
    exit 0
  fi
  sleep ${interval}
done

echo "File did not arrive."
exit 1
于 2013-07-29T14:27:26.980 に答える
2

チェックする inotify スクリプトは次のabc.txtとおりです。

#!/bin/sh

timeout 1h         \
  inotifywait      \
    --quiet        \
    --event create \
    --format '%f'  \
    --monitor /home/stage |
    while read FILE; do \
      [ "$FILE" = 'abc.txt' ] && echo "File $FILE arrived." && kill $$
    done

exit 0

このtimeoutコマンドは、1 時間後にプロセスを終了します。ファイルが到着した場合、プロセスはそれ自体を強制終了します。

于 2013-07-29T14:28:24.930 に答える