计算目录大小的最佳和最快方法是什么?例如,我们将具有以下结构:
/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 中做到这一点,但不确定它是否那么快。
谢谢。
为什么不只是:
du -sm /users/*
(不过,最慢的部分仍然可能是
du
遍历文件系统来计算大小)。
您需要这些信息做什么?如果只是为了提醒用户他们的主目录太大,您应该向文件系统添加quota限制。如果您只想要数量而不真正限制磁盘使用,您可以将配额设置为 1000 GB。
每当您访问磁盘上的任何内容时,这些数字通常都是准确的。唯一的缺点是,它们会告诉您特定用户“拥有”的文件有多大,而不是“他的主目录下”的文件有多大。但也许你可以忍受这一点。 我认为您正在寻找的是:
神奇的数字 7 去掉了子字符串 /users/,而 300 只是一个任意的大数字(awk 不是我最好的语言之一 =D,但我猜这部分无论如何都不会用 awk 编写。 )它更快,因为您不涉及对总数进行 grep,并且循环包含在 du 内。我打赌可以做得更快,但这应该足够快了。
如果您有多个核心,您可以并行运行 du 命令,
>> parallel du -sm ::: *
>> ls -a | xargs -P4 du -sm
[-P 参数后面的数字设置您要使用的 cpu 数量]
没那么慢,但会显示文件夹大小:du -sh /* >total.size.files.txt
使用
ncdu
sudo apt-get install ncdu
ncdu /your/directory/
我推荐实用程序 DUC。第一次运行
这将缓存
~/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)