Perl でディレクトリ、特にディレクトリのサイズを監視する方法を見つけようとしています。ディレクトリ サイズの変更を検出すると、特定のアクションを実行します。
私が抱えている問題は、このディレクトリにコピーするのにかなりの時間を必要とする大きなファイル、つまり> 100MBです。(Unix ではなく Windows で) 何が起こるかというと、ファイルのコピーがまだ進行中であっても、システムはファイル全体に対して十分なディスク領域を予約します。私のスクリプトは、コピーが完了していないこのファイルに対してアクションを実行しようとするため、これは問題を引き起こします。Unix では「du」を介してディレクトリ サイズの変更を簡単に検出できますが、Windows の「du」は同じように動作しません。
Perl でディレクトリ サイズの変更を検出する正確な方法はありますか?
編集:明確にするいくつかのポイント: - 私の Perl スクリプトは特定のディレクトリのみを監視しており、新しいファイルまたは新しいディレクトリを検出すると、この新しいファイルまたはディレクトリに対してアクションを実行します。ファイルをコピーしていません。ネットワーク上のユーザーは、私が監視しているディレクトリにファイルをコピーします。- 問題は、非常に大きな (100MB を超えるが、通常は数 GB) 新しいファイルまたはディレクトリが表示され (コピーされ、移動されていない)、このコピーが完了する前にプログラムが起動した場合に発生します。 - Unix では、問題のファイル/ディレクトリのサイズが大きくなっているのを簡単に「du」して確認し、適切なアクションを実行できます - Windows ではサイズが静的であるため、この変化を検出できません - opendir/readdir/closedir は違います表示されるディレクトリの一部には数千のファイルが含まれている可能性があるため、実行可能であり、次のオーバーヘッドを回避したい
理想的には、変更時にプログラムがトリガーされるようにしたいのですが、これを行う方法がわかりません。現時点では、変更を検出するまでビジー状態で待機しています。ファイル/ディレクトリのサイズの変更は、私の管理下にありません。