1

私は現在Pythonの関数を使用していますが、

os.walk('/')

OS X上のファイルシステム全体をループします。私の目的は、以下を追跡するパーソナルデーモンを作成することです。

  1. 新しく作成されたファイル/ディレクトリ
  2. 調整/修正されたファイル/ディレクトリ
  3. 削除されたファイル(多分)

アイデア

これは、Macに追加して、ディレクトリに奇妙なものが不要に配置されているかどうかを確認できるようにするための慎重な機能です。したがって、Macが(まだ不明な)トロイの木馬に感染した場合は、自分で検出できる可能性があります。 。また、何かがオフになっていることが検出されたときにインターネット接続などをシャットダウンするために、後で機能を追加することを検討しています。これはおそらく不合理な機能ですが、これは単なる個人的なスクリプトなので、それほど悪くはないと思います:P。

達成したいこと

だから私の主な質問はです。最初の実行後、ファイルシステム全体とそのメタデータ(作成データ、変更日)の配列を保存します。その後、デーモンを「監視」モードでバックグラウンドで実行し、ファイルシステムの最後に保存された既知の配列を新しくループした配列と実質的にミラーリングします。今の問題は、スクリプトを実行してテストすると、CPUが文字通り燃え始め、しばらくするとMacBookで問題が発生し始めることです。「os.walk()」がforループで作成する各ディレクトリステップの間にスリープを追加したいと思います。私の質問は:正しい睡眠時間とは何ですか?私のMacBookのディスクユーティリティには、183.867個のフォルダと1.013.320個のファイルがあり、合計1.197.187個のエントリが作成されていると表示されます(フォルダも実際にはファイルであるため)。したがって、コードを次のように設定します。

time.sleep(0.001)

..約2分で処理されるそれらの120万のエントリを約取るでしょう。これが良いかどうかはわかりません。ファイル/フォルダーの総数に基づいて、より動的に作成することを好みます。

追加機能 私の質問に基づいて、OSXディスクユーティリティがすでに私のファイルとフォルダの総数を知っていることに気づきました。Pythonは、極端なループスルーを行わずにこのデータも取得できますか?OS Xに組み込まれているターミナル関数を呼び出すかもしれません。このようにして、デーモンのステータスに小さなGUIを使用している場合は、インジケーターを保持することもできます。

前もって感謝します!

4

2 に答える 2

2

これは直接的な回答ではありませんが、追跡の要件に向けられています。

Newly made files/dirs
Adjusted/touched files/dirs
Deleted files (maybe)

http://pyinotify.sourceforge.net/を使用できます。これは inotify と連携し、ファイルの変更、削除、作成に関するイベントを送信します。これにより、大きなディレクトリのウォークスルーが回避されます。

これはInotifyのラッパーです。これは Linux で使用できます。また、fink と macports に OSX 用のライブラリとモジュールがあることもわかりました。したがって、これはよりエレガントなソリューションになるはずです。

于 2012-06-22T16:13:39.807 に答える
1

完全な答えではありませんが、いくつかの指針があります。

OSX の場合、fseventsdは inotify と同様のメカニズムを実装します。fsloggerは、その使用方法の一例です。pymacadminを使用すると、Python からインターフェイスできるようです。

実装したいものはTripwireに似ています。

于 2012-06-22T17:37:05.637 に答える