如何找到文件系统上的文件数?


26

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

find / -type f | wc -l

这似乎效率很低。我真正想做的是查找被视为“文件”的唯一索引节点的总数。

有没有更好的办法?

注意:

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

Answers:


34

--inodes选项df将告诉您保留了多少个索引节点供使用。例如:

$ 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,从统计角度来看,使用标志是非常不准确的。


我想这就是我想要的。有没有办法找出每种类型的文件有多少?这不是我的应用程序直接需要的,但可能是有用的知识。
beatgammit

1
并非不检查文件系统中每个文件的索引节点,这与进行查找大致相同。
弓箭2011年

df是否了解大多数文件系统(ext2-4,ntfs,fat,reiserfs等)?
beatgammit 2011年

它会理解可以挂载的任何文件系统类型。某些文件系统类型没有索引节点(例如fat)。df在这些文件系统上将inode的总数显示为0。其他类型应显示基础文件系统的inode统计信息。
Arcege 2011年

您是否必须将错误重定向到/dev/null看到的行,以警告您输入的文件/proc是“虚拟的”?
n0pe

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.