我需要监控网络磁盘空间使用情况并生成报告列表目录及其每个用户的大小。
有目录包含超过 1000 个文件,每个文件 20mb 大。
速度是关键,因为报告需要经常更新。
我的 Python 脚本遍历给定目录并将每个目录和文件信息存储到列表字典中。
字典的后期处理很快。I/O 是瓶颈。使用当前脚本,扫描一个 35TB 的目录大约需要 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/