フォルダ内の新しいファイルを監視し、新しいファイルが検出された場合にコマンドを実行するツール

フォルダ内の新しいファイルを監視し、新しいファイルが検出された場合にコマンドを実行するツール

新しいファイルがフォルダに追加されたらすぐに検出する方法スクリプト?

フォルダにファイルが作成されるとすぐに、スクリプトがファイルを処理できるようにしたいと思います。時間を合わせる以外に他の方法はありませんか?毎分新しいファイルを確認する作業ですか?

答え1

使用を検討する必要があります。inotifywait、例えば:

inotifywait -m /path -e create -e moved_to |
    while read dir action file; do
        echo "The file '$file' appeared in directory '$dir' via '$action'"
        # do something with the file
    done

Ubuntuinotifywaitではinotify-toolsパック

バージョン3.13(現在Ubuntu 12.04)以降、inotifywaitオプションのないファイル名が含まれています-f。以前のバージョンでは強制実行が必要な場合があります。

-e選択はイベントinotifywaitフィルタリングを実行する最良の方法です。また、readコマンドを使用すると、使用または無視を選択できる複数の変数に位置出力を割り当てることができます。出力を前処理するためにgrep / sed / awkを使用する必要はありません。

答え2

私はこれを行いましたが、スキャンの間にファイルが失われる可能性が少しあることを除いて、大きな問題が見つかりませんでした。

while true
do
       touch  ./lastwatch
       sleep 10
       find /YOUR/WATCH/PATH -cnewer ./lastwatch -exec SOMECOMMAND {} \;
done

ファイルの処理に時間がかかりすぎない場合は、新しいファイルをお見逃しなく。活動の背景を設定することもできます...防弾ではありませんが、inotifyなどの外部ツールなしでいくつかの目的を達成できます。

答え3

私は好むincron、管理する方が簡単だからです。デフォルトでは、これは利用されるサービスであり、inotifyファイル変更操作に応じてアクションを実行するように構成を設定できます。

前任者:

<directory> <file change mask> <command or action>  options
/var/www/html IN_CREATE /root/scripts/backup.sh

ここでは完全な例を見ることができます。 http://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/

答え4

新しいファイルを検出するには、そのファイルを処理し、最後に使用できる処理済みファイルを削除します。システムパス。この方法はinotifyに基づいています。 DirectoryNotEmptyオプションがあるため、systemdはディレクトリ内のファイルを検出したときに常にスクリプトを実行できます。後続のファイルを削除でき、スクリプトがディレクトリを空にした場合にのみ機能することに注意してください。

まず、mymonitor.serviceファイルを準備してください

[Unit]
Description=Start the script

[Service]
Type=oneshot
ExecStart=/path/to/your/script

次に、mymonitor.pathに移動してパスを定義します。

[Unit]
Description= Triggers the service

[Path]
DirectoryNotEmpty=/path/to/monitor

[Install]
WantedBy=multi-user.target

.path ファイルの名前がサービス名と同じ場合、.path ファイルにサービス名を指定する必要はありません。

それに基づいています愚か者のためのファイルアクセスの監視

関連情報