Linux文件夹大小

3

我需要定期监控我的Linux机器上的文件夹,以检查它们是否超出了某些限制。

我已经检查了stat函数调用,但在所有子文件夹和文件上递归运行stat非常耗时,而我需要对所有文件夹执行此操作。

内核是否维护任何数据结构,我可以在我的程序中解释。或者是否有标准API可用于此。

7个回答

3

如果您需要强制限制,则使用配额


3
如果配额机制不合适,那么inotify可能会很方便:
来自维基百科:
inotify是Linux内核子系统,用于扩展文件系统以注意文件系统的更改,并将这些更改报告给应用程序。

我已经检查了inotify事件,此处没有文件夹大小监控。 - Sirish
2
@siri 是的,我知道,但你可以挂钩每个 IN_CLOSE_WRITE 并执行一些操作,而不是一直这样做而不知道目录中是否有任何更改。 - Tom Feiner

2

类型

du -sm directory_name

会递归地给出目录的总大小(以兆字节为单位)。

类型

man du

需要帮助使用此命令。


1

你需要使用 quotactl:

quotactl -- manipulate filesystem quotas

SYNOPSIS
     #include <sys/types.h>   /* types needed by quota.h */
     #include <sys/quota.h>   /* for disk quotas */

1

递归调用stat是获取当前文件夹大小的唯一方法。如果您想持续监视文件系统,请查看inotify。


尽管如此,请注意使用哪些stat字段来计算所使用的空间量。您可能需要将每个文件或目录的使用情况向上舍入到下一个st_blksize的倍数。 - JeremyP

0

我同意@Axel的说法。但是如果您确实需要通过代码来完成此操作,您可以通过popen执行du shell命令:

FILE* pf = popen("du -ch [your folder] | grep total")

然后通过文件句柄和fgets(...)读取命令的输出


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接