我想知道我的文件系统上有多少文件。我知道我可以做这样的事情:
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
。