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

bea*_*mit 27 filesystems disk-usage inode

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

find / -type f | wc -l

这似乎非常低效。我真正想做的是找到被视为“文件”的唯一 inode 的总数。

有没有更好的办法?

笔记:

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

Arc*_*ege 35

--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
Run Code Online (Sandbox Code Playgroud)

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

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