ネットワーク ディスク容量の使用状況を監視し、レポート リストのディレクトリとユーザーごとのサイズを生成する必要があります。
1000 以上のファイルを含むディレクトリがあり、それぞれのサイズは 20 MB です。
レポートは頻繁に更新する必要があるため、スピードが重要です。
私のPythonスクリプトは、指定されたディレクトリを歩き、各ディレクトリとファイル情報をリストの辞書に保存します。
辞書の後処理が速い。I/O がボトルネックです。現在のスクリプトでは、35 TB のディレクトリをスキャンするのに約 5 ~ 6 時間かかります。
プレーンなos.walk & stat、 suprocessing du、find -type f -printf を試しました。
os.walk と du
どちらも下までドリルダウンし、すべてのディレクトリ、ファイルを統計します。これは最初の実行に必要ですが、その後の更新では、変更されていないディレクトリとファイルを不必要に統計することからヒットが発生します。また、何かが変更された場合、サブディレクトリで何が変更されたかを知る必要があるため、最大深度を設定できません。
-タイプfを見つける
これはファイルのみを検索します。上と大差ない。少なくとも、これはディレクトリを統計しません (ディレクトリ情報は常駐ファイルから収集されます)。速度に目立った改善はありません。
ディレクトリの変更時刻を使用して、内部で何かが変更されたかどうかを確認したいと考えていました。もしそうなら、飛び込み、そうでなければスキップしてください。ただし、mtimeは、ディレクトリ内の作成、削除、名前変更されたアイテムのみを更新します。
では、すべてのディレクトリとファイルをブルート フォーシングする以外に方法はありませんか?
Directory layout:
group_002/
bob/
fubar/
etc/
dave/
jim/