计算目录大小的最快方法

Jus*_*tin 5 linux filesystems file-io

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

/users
      /a
      /b
      /c
      /...
Run Code Online (Sandbox Code Playgroud)

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

a = 1224KB
b = 3533KB
c = 3324KB
...
Run Code Online (Sandbox Code Playgroud)

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

du -cms /users/a | grep total | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

caf*_*caf 6

为什么不呢:

du -sm /users/*
Run Code Online (Sandbox Code Playgroud)

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


Rol*_*lig 4

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

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

  • 在这种情况下,我将依赖磁盘配额系统给出的数字。如果您不信任他们,您仍然可以每天计算一次实际磁盘使用情况,看看这两个数字是否不同。但请注意,诸如硬链接之类的东西可能会使准确计算磁盘使用情况变得困难。内置的磁盘配额系统已经处理了这一切。 (2认同)