inotifywait (inotify-tools の一部) は、目的を達成するための適切なツールです。複数のファイルが同時に作成されていても問題ありません。それらを検出します。
サンプル スクリプトは次のとおりです:
#!/bin/sh
MONITORDIR="/path/to/the/dir/to/monitor/"
inotifywait -m -r -e create --format '%w%f' "${MONITORDIR}" | while read NEWFILE
do
echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "[email protected]"
done
<ブロック引用> inotifywait これらのオプションを使用します。
-m ディレクトリを無期限に監視するには、このオプションを使用しないと、新しいファイルが検出されるとスクリプトが終了します。
-r ファイルを再帰的に監視します (多数のディレクトリ/ファイルがある場合、新しく作成されたファイルを検出するのに時間がかかる場合があります)
-e 作成 監視するイベントを指定するオプションであり、あなたの場合は create にする必要があります 新しいファイルに注意する
--フォーマット '%w%f' /complete/path/file.name の形式でファイルを出力します
"${MONITORDIR}" 以前に定義した、監視するパスを含む変数です。
そのため、新しいファイルが作成された場合、inotifywait がそれを検出し、出力を出力します。 (/complete/path/file.name) パイプへ whilewill その出力を変数 NEWFILE に割り当てます .
while ループ内では、mailx ユーティリティ を使用して youraddress にメールを送信する方法が表示されます。 localMTA (あなたの場合は Postfix) で問題なく動作するはずです。
複数のディレクトリを監視したい場合、inotifywait はそれを許可しませんが、2 つのオプションがあります。監視するディレクトリごとにスクリプトを作成するか、スクリプト内に次のような関数を作成します。
#!/bin/sh
MONITORDIR1="/path/to/the/dir/to/monitor1/"
MONITORDIR2="/path/to/the/dir/to/monitor2/"
MONITORDIRX="/path/to/the/dir/to/monitorx/"
monitor() {
inotifywait -m -r -e create --format "%f" "$1" | while read NEWFILE
do
echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "[email protected]"
done
}
monitor "$MONITORDIR1" &
monitor "$MONITORDIR2" &
monitor "$MONITORDIRX" &
たとえば、inotifywait を使用します。
inotifywait -m /path -e create -e moved_to |
while read path action file; do
echo "The file '$file' appeared in directory '$path' via '$action'"
# do something with the file
done
詳細と例については、記事を参照してください
inotify-tools を使用して、ファイルシステム イベントでスクリプトをトリガーする方法。