计算目录大小的最快方法

问题描述 投票:0回答:7

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

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

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

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

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

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

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

现在我又想了一下,使用node.js 有意义吗?这样,我们就可以计算目录大小,甚至可以在一个事务中全部插入数据库。我们也可以在 PHP 和 Python 中做到这一点,但不确定它是否那么快。

谢谢。

linux file-io filesystems
7个回答
6
投票

为什么不只是:

du -sm /users/*

(不过,最慢的部分仍然可能是

du
遍历文件系统来计算大小)。


4
投票

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

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


4
投票

神奇的数字 7 去掉了子字符串 /users/,而 300 只是一个任意的大数字(awk 不是我最好的语言之一 =D,但我猜这部分无论如何都不会用 awk 编写。 )它更快,因为您不涉及对总数进行 grep,并且循环包含在 du 内。我打赌可以做得更快,但这应该足够快了。


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


3
投票

>> parallel du -sm ::: *

>> ls -a | xargs -P4  du -sm

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

    

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


1
投票

使用

ncdu

1
投票

sudo apt-get install ncdu

命令示例:

ncdu /your/directory/

我推荐实用程序 DUC。第一次运行

0
投票

这将缓存

~/cache/duc
 中的所有目录大小。您可以通过 
duc ls ~/

获取您所要求的表格。或者,如果您只想要当前大小:

result_in_bytes=$(duc ls -b ~/ | awk '{sum += $1} END {print sum}')
result_in_mb=$(echo "scale=1; $result_in_bytes / 1024 / 1024" | bc)
    

© www.soinside.com 2019 - 2024. All rights reserved.