web-dev-qa-db-ja.com

ファイルシステム上のファイル数を確認するにはどうすればよいですか?

ファイルシステムにあるファイルの数を知りたい。私はこのようなことができることを知っています:

find / -type f | wc -l

これは非常に非効率的です。私が本当にやりたいのは、「ファイル」と見なされる一意のiノードの総数を見つけることです。

もっと良い方法はありますか?

注意:

ファイル同期プログラムを開発しているため、これを実行し、いくつかの統計分析を実行したいと思います(平均的なユーザーがシステム上にあるファイルの合計数に対するファイルの数など)。ただし、これらのファイルについて知っている必要はありません。ファイルが存在することだけを知っています(パスはまったく関係ありません)。マウントされた各ファイルシステム(および関連するマウントポイント)について、この情報を特に知りたいです。

26
beatgammit

dfの-​​-inodesオプションは、使用するために予約されているiノードの数を通知します。例えば:

$ 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フラグは、統計的な観点から、非常に不正確です。

34
Arcege

statvfs() を使用して、f_files - f_ffreeを計算します。

2
Chris Down