2

~10,000 のサブフォルダーを含むフォルダーがあります。

Linux API またはツールは、/SharedRoot などの下の任意のフォルダーの変更を監視できますか、またはフォルダーごとに inotify をセットアップする必要がありますか? (つまり、10k以上のフォルダーに対してこれを実行したい場合、私は負けます)。私はこの非効率的な方法の例をすでに見たことがあるので、そうだと思います

私の問題:
最近アクティブな「プロジェクト」を一番上にして、フォルダを時系列で並べ替える必要があります。

ファイルが変更されると、そのファイルの上の各フォルダーは、ファイルと一致するように最終変更のタイムスタンプを更新する必要があります。遅延は大丈夫です。ファイル (通常は MS Excel) を開き、再度閉じると、ファイルの日付が上下することがあります。このため、ファイルが閉じられるまで待ってから、そのファイルのフォルダーをチェックのためにキューに入れ、しばらくしてから、そのフォルダー内の最新のファイルを探しに行きます。 Excel または同様のプログラムによって、元のタイムスタンプにすでにさかのぼることができます。また、同じフォルダーの複数のファイルが使用/作成された場合、そのフォルダーの親のタイムスタンプをバッファリングして、少なくとも 1 つの遅延更新に折りたたまれた一連の更新を取得することは理にかなっています。

Linux ソリューションを探しています。Windows サーバーで実行できるコードがいくつかあります。キューイング機能のほとんどはここにあります: http://github.com/sesam/FolderdateFollowsFiles/blob/master/FolderdateFollowsFiles/Follower.vb

利用可能な API:s
Windows の inotify に関連するものである ReadDirectoryChangesW は、フォルダーとそのサブツリー全体を監視できます。http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspxの bWatchSubtree を参照してください。

サンバ?
samba ソースにパッチを適用する可能性はありますが、おそらく既に利用可能なフックがあるのでしょうか? クライアント側 (さまざまな Windows バージョン) や、フォルダーを再帰的に更新するためのファイル アクティビティのスパイなど、他の可能性はありますか?

4

2 に答える 2

1

あなたがSamba共有の下でこれらの木を実行しているのを見ました。たぶん、ClamAVウイルススキャンVFSモジュールを使用して、それらが「クローズ時にスキャン」をトリガーする方法を確認するためのインスピレーションを得ることができます。

Samba Howto:スタック可能なVFSモジュール

閉じたファイルの時刻を確認し、inotify et alに関連するパフォーマンス/メモリのオーバーヘッドなしで、それにつながるディレクトリパスを変更するのは非常に簡単です。

ちょっとした考え。

于 2010-05-27T16:22:31.260 に答える
1

はい、inotify を使用する必要がありますが、すべてのノードでウォッチをすぐに使用する必要はありません。

プロセスは (ビーグル犬のやり方に似ています) かなり単純です:

  1. ルート ノードで監視を確立します。
  2. ルート ノードから始まる幅優先(深さ優先ではない) 検索を実行します。
  3. 検索順に、ディレクトリにウォッチを設定します。
  4. ディレクトリ作成イベントを監視し、追加を続けます。これが発生したら、リストを再ソートします。

幅優先検索は重要です。そうしないと、起動時の競合とルート ノードのクライアントが何を行っているかによって、いくつかの情報を見逃す可能性があります。

この RFQについても言及しているこの質問を参照してください。私はあなたが直面しているのとまったく同じ問題を抱えていました。

基本的に、1 つのスレッドが引き続きディレクトリ作成イベントを監視し、新しいディレクトリが作成されるのとほぼ同時に新しい監視を追加します。要求に応じて、または inotify スレッドがそのロックを解放した後に、他の何かがリストをソートします。

私は上記のロックフリーバージョンを試みましたが、..疑わしい..成功しました:)

于 2010-05-21T11:33:20.447 に答える