inotifywait 新しいディレクトリが検出されませんでした。

inotifywait 新しいディレクトリが検出されませんでした。

次のスクリプトは、TARGETディレクトリのclose_writeイベントを監視し、ファイルに対して特定のタスクを実行します。

#!/bin/bash

TARGET=/home/*/ftp/files

inotifywait -m -r -e close_write $TARGET |
        while read directory action file
        do
                if [[ "$file" =~ .*jpg$ ]] || [[ "$file" =~ .*mp4$ ]]
                then
                        # do sth with the file
                fi
        done

/home/sammy/ftp/filesegとサブファイルのclose_writeイベントを正しく監視しています/home/neo/ftp/files

私が直面している問題は、Mikeのような新しいユーザーが作成されたときに時計が機能しなくなったため、スクリプトを再実行する必要があることです。知る新しいユーザーのパスについては、nohupプロセスを終了して再実行する必要があります。

新しく作成されたディレクトリでinotifywaitについて学ぶ方法はありますか?

答え1

-r監視しているディレクトリの下に作成された新しいディレクトリを自動的に見つけます。しかし、ここではルートなどを/home/sammy/ftp/files取得し、その下にないため、検出されません。 (シェルは実行する前にglobを拡張することを忘れないでください。)/home/neo/ftp/files/home/mike/home/*/ftp/filesinotifywait

原則として、コンテンツ全体を視聴/homeし、そこにないコンテンツは手動で無視できます/home/*/ftp/files。しかし、これは多くの監視を生成し、望ましくないイベントを多く生成します。

より良いアイデアは、/homeディレクトリに加えてさらに監視/home/*/ftp/filesし、新しいサブディレクトリが追加されたら監視を再開することです/home。新しいユーザーが常にすぐにftp/filesディレクトリを作成するのはそれほど悪くはありません。ただし、新しいディレクトリが表示されるまで明示的に待つ必要があるかもしれません。これにより、新しいディレクトリを作成する前にスクリプトリセットの競合に陥り、見逃すことはftp/filesありません。inotifywaitftp/files

(再起動すると、inotifywait新しいファイルを生成できるウィンドウが作成されますが、スクリプトはこれを失います。inotifyを直接サポートするいくつかのプログラミング言語を使用する方が安全です。)

/home/$user/files/ftpまったく異なるアプローチは、関連コンテンツがもはや配置されないようにディレクトリ構造を変更することです/srv/ftp/$user。その後、時計を追加するだけで、/srv/ftp問題なく自動的に新しいユーザーを引き付けることができます。

関連情報