计算目录大小的最佳和最快方法是什么?例如,我们将具有以下结构:
/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中做到这一点,但不确定它是否同样快。
感谢。
答案 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的数量]