ファイルがその場所に到着するまで 1 時間ポーリングし続けたいと思います。
私のディレクトリ:/home/stage
ファイル名(探しているもの) :abc.txt
ディレクトリを1時間ポーリングし続けたいのですが、ファイルが到着した/home/stage
場合は1時間以内にポーリングを停止し、メッセージを表示する必要があります。abc.txt
file arrived
file has not arrived
Unixでこれを達成する方法はありますか?
ファイルがその場所に到着するまで 1 時間ポーリングし続けたいと思います。
私のディレクトリ:/home/stage
ファイル名(探しているもの) :abc.txt
ディレクトリを1時間ポーリングし続けたいのですが、ファイルが到着した/home/stage
場合は1時間以内にポーリングを停止し、メッセージを表示する必要があります。abc.txt
file arrived
file has not arrived
Unixでこれを達成する方法はありますか?
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
チェックする 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 時間後にプロセスを終了します。ファイルが到着した場合、プロセスはそれ自体を強制終了します。