GNU/Linux >> Linux の 問題 >  >> Linux

inotify-tools を使用して、複数のディレクトリ内で再帰的に新しいファイルを継続的に検出します

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 ループ内では、ma​​ilx ユーティリティ を使用して 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 を使用して、ファイルシステム イベントでスクリプトをトリガーする方法。


Linux
  1. 新しいファイルのフォルダを監視するスクリプト?

  2. Inotifyを使用してファイルへのアクセスを監視しますか?

  3. gnu cp コマンドを使用して複数のディレクトリにファイルをコピーする方法

  1. bash の改行でテキストをエコーする

  2. 複数のディレクトリとファイルの場所で tar を作成する

  3. 時々ローテーションされる末尾のログを継続的に監視します

  1. findコマンドを使用してLinux上のファイルとディレクトリを検索します

  2. ワイルドカードを使用してディレクトリを再帰的に削除するにはどうすればよいですか?

  3. clamav で複数のディレクトリをスキャンする方法