2011-12-10 19 views
3

ファイルがいつ変更されたかを正確に追跡して同期することができるDropboxと彼のContinuous Data Protectionメカニズムのように、ファイルが変更されたときにメソッド(Python)を実行する方法は誰でも知っています。dropboxのようなファイルの変更を追跡するには?

もちろん、ハードディスク全体ではなく、指定されたディレクトリのトラックになります。

OBS:WindowsおよびLinux OSの場合。 Macはプラスだ);

+0

誰かが素敵なライブラリに包まれていない限り、これはOSに依存します。どんなOSをターゲットにしていますか? Linuxボックス用 – Thomas

+0

しかし、それがどのようにウィンドウ上にあるのか知ることは素晴らしいことです。 – Pabluez

答えて

5

pyinotifyをおそらくあなたがやりたいだろう。ただし、inotify(7) manpageに記載されている警告に注意してください。

イベントキューはオーバーフローすることがあります。この場合、イベントは失われます。堅牢なアプリケーションは、イベントを正常に消失する可能性を処理する必要があります。

ディレクトリサブツリー全体を監視し、そのサブディレクトリに新しいサブディレクトリが作成されている場合は、新しいサブディレクトリの監視を作成するまでに、サブディレクトリに新しいファイルが作成されている可能性があります。したがって、時計を追加した直後にサブディレクトリの内容をスキャンすることができます。

+0

素晴らしいモジュール!私はLinuxで使うはずのものだと思います。それは明らかに私が必要とするものです。私はそれを試み、できるだけ早く報告するつもりです。他のコメントを参照して – Pabluez

+0

、それは私が探していたものです。 Pyinotifyはカーネル "bult-in" inotifyを処理します。これは、カーネル2.6.13以降のLinux上でファイルシステムを追跡する責任があります。まあ、ありがとう。 – Pabluez

+1

inotifyはイベントがあなたのコードに届くという保証はありませんが、注意してください。リブート中、サービスの再起動中、およびイベントが失われる可能性のある高負荷下での状況があります。したがって、信頼できる同期/複製を行う場合は、同期されたものを何らかのデータベースに保存し、すべてのファイルをスキャンして変更を行う必要があります。おそらくチェックサムを使用します。 Inotifyはインスタントシンクを得るための素晴らしい機能ですが、スキャンルーチンも必要になります。 –

4

Pythonにこれに対応するクロスプラットフォームソリューションがあるかどうかはわかりませんが、Windowsベースのソリューションだけに興味がある場合は、directory change notificationsを調べる必要があります。 Win32 API関数を呼び出すには、pywin32を調べることができます。

Linuxの場合、fschange,dnotifyおよびinotifyを含む多くのソリューションがあるようです。私はどちらが推奨される解決策であるか分からないが、inotifyが最も完全な解決策であるようだ。

すべてのプラットフォームにこのような機能が搭載されているわけではありません。特定のプラットフォームで利用できない場合は、ディレクトリの内容を定期的にチェックして、そのような通知をエミュレートする必要があります。

+0

偉大な答え!そして、あなたはそれがLinux OS上でどうなるか知っていますか? – Pabluez

+0

私はこれらのソリューションを見て、できるだけ早く報告するつもりです。 – Pabluez

+0

yeh、fschangeは、古いinotifyである古いdnotifyです。 Inotifyは2.6.13以降、カーネルの一部です。これはCで使われることを前提としています。Pythonの場合、Pyinotifyというモジュールがあり、一般的に "api"のinotifyを処理し、必要なものを提供します。 (ユーザー@Thomasはこの情報を提供しました)。だから、それは私が探していたまさにあるのですが、あなたは窓のための情報を提供し、それは今後の参考のためにも非常に便利です。どうもありがとう。 – Pabluez

0
+0

Rsyncはバックアップ専用ではありませんか?私は何もバックアップや同期をしたくない、私はファイルを追跡し、それらのファイルが変更されるたびに私のメソッドを実行するだけです。 – Pabluez

+0

rsyncは2つ以上の場所に同期データがあることを確認します。これは、変更を追跡し、それらの差分のみを同期することによって行います。したがって、それらの場所はすべて類似点にできるだけ近いです。それはあなたが必要とするものではありませんか? –

+0

ええ、私はよく知っているrsyncのこの共通の動作。私が本当に望むのは、アラートを生成するための変更を追跡し、その他のタスク(ログ、ルートキットの検証など)を行うことです。しかし、ファイルのコピーをどこか別の場所に置いてはいけません。多くのプラットフォームで動作するので、rsyncがこのタスクを達成できるのは素晴らしいことです。 – Pabluez

関連する問題