【发布时间】:2012-07-26 10:37:19
【问题描述】:
我需要监控网络磁盘空间使用情况并生成报告列出每个用户的目录及其大小。
有超过 1000 个文件的目录,每个文件 20mb 大。
速度是关键,因为报告需要经常更新。
我的 Python 脚本遍历给定目录并将每个目录和文件信息存储到列表字典中。
字典的后期处理很快。 I/O 是瓶颈。使用当前脚本,扫描一个 35TB 的目录大约需要 5-6 小时。
我尝试过简单的 os.walk & stat, suprocessing du, find -type f -printf em>。
os.walk 和 du
他们都深入到底部并统计每个目录,文件。虽然这是初始运行所必需的,但后续更新会因不必要地统计未修改的目录和文件而受到影响。而且我无法设置最大深度,因为如果有任何更改,我需要知道子目录中发生了什么变化。
find -type f
这将只查找文件。和上面没有太大区别。至少这不会统计目录(目录信息是从驻留文件中收集的)。速度没有明显改善。
我曾希望使用目录的修改时间来检查内部是否发生了某些变化。如果是这样,请潜入,否则跳过。但 mtime 只更新目录中已创建、已删除、重命名的项目。
那么除了这种暴力破解所有目录和文件之外,没有其他方法了吗?
Directory layout:
group_002/
bob/
fubar/
etc/
dave/
jim/
【问题讨论】: