计算目录大小的最快方法

时间:2010-11-29 20:18:08

标签: linux file-io filesystems

计算目录大小的最佳和最快方法是什么?例如,我们将具有以下结构:

/users
      /a
      /b
      /c
      /...

我们需要输出为每个用户目录:

a = 1224KB
b = 3533KB
c = 3324KB
...

我们计划在/ users下拥有数十甚至数十万个目录。以下shell命令有效:

du -cms /users/a | grep total | awk '{print $1}'

但是,我们必须多次调用它。整点,就是输出;每个用户目录大小将存储在我们的数据库中。此外,我们希望尽可能频繁地更新它,但不会阻止服务器上的所有资源。是否有可能让它每分钟计算用户目录大小?每5分钟怎么样?

既然我正在考虑它,那么使用node.js会有意义吗?这样,我们就可以计算目录大小,甚至可以在一个事务中插入数据库。我们也可以在PHP和Python中做到这一点,但不确定它是否同样快。

感谢。

5 个答案:

答案 0 :(得分:6)

为什么不呢:

du -sm /users/*

(最慢的部分仍然可能是du遍历文件系统来计算大小,但是)。

答案 1 :(得分:4)

您需要这些信息?如果只是为了提醒用户他们的主目录太大,则应该为文件系统添加 quota 限制。如果您只想要数字而不是真正限制磁盘使用,则可以将配额设置为1000 GB。

每当您访问磁盘上的任何内容时,这些数字通常都是准确的。唯一的缺点是,它们会告诉您特定用户拥有的文件大小,而不是其主目录下面的文件的大小。但也许你可以忍受。

答案 2 :(得分:4)

我认为你在寻找的是:

du -cm --max-depth=1 /users | awk '{user = substr($2,7,300);
>                                   ans = user ": " $1;
>                                   print ans}'

魔术数字7正在取消子字符串/ users /,而300只是一个任意大数字(awk不是我最好的语言之一= D,但我猜这部分不会用awk写的)无论如何。)它更快,因为你不涉及greping总数而且循环包含在du里面。我打赌它可以更快地完成,但这应该足够快。

答案 3 :(得分:1)

不是那么慢,但会显示文件夹大小:du -sh / *> total.size.files.txt

答案 4 :(得分:0)

如果您有多个内核,则可以并行运行du命令,

例如(从要检查的文件夹中运行):

SELECT table.* FROM ( SELECT source FROM table GROUP BY source ) groups LEFT JOIN table ON id = ( SELECT id FROM table WHERE source = groups.source ORDER BY message_time desc LIMIT 1 );

>> parallel du -sm ::: *

[-P参数后面的数字设置您要使用的cpus的数量]