答え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 ファイルにサービス名を指定する必要はありません。
それに基づいています愚か者のためのファイルアクセスの監視