如何查找文件系统上的文件数量?

如何查找文件系统上的文件数量?

我想知道我的文件系统上有多少文件。我知道我可以做这样的事情:

find / -type f | wc -l

这看起来效率极低。我真正想做的是找到被视为“文件”的唯一索引节点的总数。

有没有更好的办法?

笔记:

我想这样做是因为我正在开发一个文件同步程序,并且我想做一些统计分析(例如普通用户总共有多少个文件与系统上有多少个文件)。但是,我不需要了解有关这些文件的任何信息,只需知道它们存在即可(路径根本不重要)。我特别想知道每个已安装文件系统(及其关联的安装点)的信息。

答案1

--inodes 选项df将告诉您保留使用多少个 inode。例如:

$ df --inodes / /home
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            3981312  641704 3339608   17% /
/dev/sda8            30588928  332207 30256721    2% /home
$ sudo find / -xdev -print | wc -l
642070
$ sudo find /home -print | wc -l
332158
$ sudo find /home -type f -print | wc -l
284204

请注意,返回的条目数find大于IUsed根 (/) 文件系统,但小于 /home。但两者都在 0.0005% 以内。差异的原因是由于硬链接和类似的情况。

请记住,目录、符号链接、UNIX 域套接字和命名管道都是与文件系统相关的“文件”。因此,find -type f从统计学的角度来看,使用flag 是非常不准确的。

答案2

使用statvfs(),并计算f_files - f_ffree

相关内容