ディレクトリの内容が更新されたときにコマンドを実行する方法は?

ディレクトリの内容が更新されたときにコマンドを実行する方法は?

A他の人がコンテンツを頻繁に変更するディレクトリがあります。

B私はこれまでに存在していたすべてのファイルを保持するプライベートディレクトリを作成しましたA

rsync現在は、バックアップするAファイルを取得するために時々実行しますB。しかし、いくつかのファイルがA.に追加された後。Aにコピーされる可能性があるという懸念がありますB

これが起こらないようにする最善の方法は何ですか?理想的には、A変更があるたびに現在のバックアップスクリプトを実行したいと思います。

答え1

お持ちの場合イノティファイツールinotifywaitインストール後にファイルまたはディレクトリが次に記録されたら、それを使用して操作をトリガーできます。

#!/bin/sh
dir1=/path/to/A/
while inotifywait -qqre "attrib,modify,close_write,move,move_self,create,delete,delete_self" "$dir1"; do
    /run/backup/to/B 
done

スイッチ-qqは完全に静かで-r再帰的で(必要な場合)-e監視するイベントです。 ~からman inotifywait:

プロパティ 監視されたファイルまたは監視されたディレクトリにあるファイルのメタデータが修正されました。これには、タイムスタンプ、ファイル権限、拡張属性などが含まれます。

調整監視ファイルまたは監視ディレクトリのファイルに書き込まれます。

書き込みを閉じる監視されたファイルまたは監視されたディレクトリのファイルが書き込み可能モードで開かれて閉じました。これは必ずしもファイルが作成されたことを意味するわけではありません。

移動するファイルまたはディレクトリが監視ディレクトリから移動されたか、監視ディレクトリに移動されました。これは実際にMoving_toとMoving_fromを受信することによって行われるため、受信されたクローズイベントはMOVEではなく2つのいずれかに出力されます。

move_self監視対象のファイルまたはディレクトリが移動されました。このイベントの後、ファイルやディレクトリは監視されなくなります。

作る監視対象のディレクトリにファイルまたはディレクトリが作成されました。

削除監視ディレクトリのファイルまたはディレクトリが削除されました。

自分を削除監視対象のファイルまたはディレクトリが削除されました。このイベントの後、ファイルやディレクトリは監視されなくなります。このイベントを明示的に受信しない場合でも、このイベントが発生する可能性があります。

答え2

努力するentrファイルが変更されたときに任意のコマンドを実行できるコマンドラインツール。バージョン2.9以降、ディレクトリに新しいファイルが追加されたときにイベントに応答するためのディレクトリ監視オプション(-d)が追加されました。

プロジェクトに新しいファイルが追加された場合のユーティリティの実行例:

$ while true; do
> echo src/* | entr -d your_command
> done

ディレクトリ監視モードでは、各ファイルの親ディレクトリが監視リストに暗黙的に追加されます。

唯一の意味は、新しいファイルが表示されたら、外部シェルがファイルシステムを繰り返して再スキャンできるようにシャットダウンする必要があることです。

ディレクトリ監視オプションがないバージョンは次のとおりです。

$ while true; do
> echo src/* src | entr your_command
> done

以下は、必要に応じてより簡単な例です。

$ ls -d * | entr sh -c 'rsync -vuar A B'

確認する:eradman.com/entrproject詳しくはウェブサイトをご覧ください。

答え3

厳密に言えば、誰かがファイルを削除し、すばやく削除すると見逃す可能性があります。何かの目的を指します。inotify(Linuxでは、または他のuniceでは同様の機能)リスクウィンドウを小さくします。

そのディレクトリに必要なファイルシステムをマウントできる場合(これはオプションではない可能性があることに注意してください)、すべてのファイルバージョンを記録するシステムを配置できます。ファイルのコピー

答え4

あなたが探しているプログラムはinotify

関連情報