在linux / bsd上知道真正的目录大小的快速方法

计算实际目录大小的最快方式是什么? 我不知何故就发现自己需要很多东西。

简单地做:

 #du -hs / dir

太慢了。 有没有我可以运行的服务,它会周期性地计算目录大小并caching它们供以后参考? (就像一个定位数据库)

可悲的是我不知道,但写一个不应该太难。 一旦晚上跑步

# du -a / > /var/lib/filesizes.txt. 

那么你只需要一个小脚本来总结这些。 就像是:

 # perl -ne 'BEGIN { $total = 0 } if ($_ =~ m/(\d+)\s+\/var\/www\//) { $total+=$1;} END {print "$total\n";}' /var/lib/filesizes.txt 

如果你想要多一点同步,那么你将不得不开始写一些使用inotify的东西,来找出文件系统何时改变和更新数据库,这可能是类似bdb的东西。

我曾经有一个cron的工作,将'du -htX –max-depth = 3'或类似的,几年 )的输出redirect到一个文本文件。 然后我用munin创build一个rrdtoolgraphics作为input。 这是一件非常糟糕的事情,但它让我一目了然地知道我们备份的空间有多大,存储趋势是多less有点精细的目录层次结构。

如果你的盒子上有桌面环境, FileLight是非常棒的。 这很快,并允许您深入目录树,然后只需要重新扫描该子树,以获得更新的视图。 你可以很好地每天运行一次全面的扫描,然后把程序整天打开而不需要更新。

如果这是使用nagios风格检查一个目录大小,你可以做如下的事情

你可以有这个cron条目:

* / 5 * * * * root du -s / path / to / some / dir> /tmp/directory_usage.tmp && / bin / mv /tmp/directory_usage.tmp / tmp / directory_usage

然后,您可以使用脚本立即获取/ tmp / directory_usage的内容。

显然,如果目录开始变得很大,将会出现竞争状态。 (即du-s开始接近5分钟的标记。)

另一条路线是使用find在目录中build立文件大小列表,并将其存储到平面文件或文件数据库(如果您计划同时执行大量目录)

最后一种方法是使用find定期获取文件列表,修改时间比上次运行时间更新,并且基本上将文件大小“同步”到db结构中……显然这取决于您试图通过何种方式实现你的问题