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


27

A他の人が頻繁に内容を変更するディレクトリがあります。

私はB今までにあったすべてのファイルを保管する個人的なディレクトリを作りましたA

現在、私は時折実行rsyncファイルからバックアップする取得することAB。ただし、いくつかのファイルがに追加されA、からAにコピーされる前に削除される可能性を恐れていますB

これを防ぐための最良の方法は何ですか?理想的には、内容がA変更されるたびに現在のバックアップスクリプトを実行したいと思います。

回答:


29

あなたが持っている場合のinotify-toolsが、あなたが使用することができますインストールされinotifywaitたファイルまたはディレクトリが書き込まれている場合、アクションをトリガーします:

#!/bin/sh
dir1=/path/to/A/
while inotifywait -qqre modify "$dir1"; do
    /run/backup/to/B 
done

ここで、-qqスイッチが完全に沈黙して、-r再帰的(必要な場合)、-eこの場合には、モニタにイベントですmodify。からman inotifywait

変更
監視対象ファイルまたは監視対象ディレクトリ内のファイルが書き込まれました。

5
incrond興味深いかもしれません。
ショーンJ.ゴフ

1
クール。ログインしたときに実行されるように、bashrcに上記のスクリプトを置くだけですか?常に実行できる別の方法はありますか?
oadams

ログインの場合/etc/profile、システム全体または.bash_profileユーザーのみに対してはい。起動後に実行するには、Unix / Linuxのフレーバーに依存します。/etc/rc.local/etc/rc.d/または/etc/init.d/
jasonwryan

1
大きなディレクトリのためには、使用して検討する必要があり--monitorそうでない場合があったときに多くのオーバーヘッドがあり、スイッチ(およびパイプの代わりにあなたのループへの出力)をinotifywait何度も何度も開始され、
トビアスKienzler

FTPサーバーを介してディレクトリツリーに追加された各ファイルのスクリプトを実行するために、このソリューションはどの程度信頼性がありますか(平均3分ごとに新しいファイルが追加され、これが何年も続くとしましょう)?そうでない場合、代替ソリューションはありますか?
ニコラノバック

5

厳密に言えば、誰かがファイルをドロップし、非常に迅速にそれを削除した場合、あなたはそれを見逃すかもしれません。inotifyの使用(Linux、または他の大学での同様の機能)により、リスクのウィンドウは小さくなります。

選択したファイルシステムをそのディレクトリにマウントできる場合(これはオプションではないかもしれませんが)、すべてのファイルバージョンを記録するファイルシステム(copyfsなど)を配置できます。


4

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'

詳細については、entrproject.orgの Webサイトを確認してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.