解決策 1:
これが専用のファイルシステムにある場合、または一定数のファイルのオーバーヘッドがある場合は、「 df -i":
[email protected]:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75885 60413843 1% /
上記のテスト ボックスでは、75,885 個の inode が割り当てられています。ただし、これらの inode は単なるファイルではなく、ディレクトリでもあります。例:
[email protected]:~# mkdir /tmp/foo
[email protected]:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75886 60413842 1% /
[email protected]:~# touch /tmp/bar
[email protected]:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75887 60413841 1% /
注:すべてのファイル システムが同じ方法で inode カウントを維持するわけではありません。 ext2/3/4 はすべて機能しますが、btrfs は常に 0 を報告します。
ファイルとディレクトリを区別する必要がある場合は、ファイルシステムを調べて、それぞれを「統計」して、ファイル、ディレクトリ、シンボリックリンクなどであるかどうかを確認する必要があります...ここでの最大の問題はそうではありませんすべてのテキストを "wc" にパイプしますが、すべての inode とディレクトリ エントリを検索してそのデータをまとめます。
「df -i」で表示される inode テーブル以外に、特定のディレクトリの下にいくつのファイルがあるかを示すデータベースは実際にはありません。ただし、この情報が重要な場合は、プログラムがこのディレクトリにファイルを作成するときに番号を増やし、削除するときに番号を減らすことで、このようなデータベースを作成および維持できます。それらを作成するプログラムを制御しない場合、これはオプションではありません。
解決策 2:
この StackOverflow の質問に対して、カスタム ファイル カウント プログラムを作成しました:https://stackoverflow.com/questions/1427032/fast-linux-file-count-for-a-large-number-of-files
参照、ダウンロード、または貢献したい場合は、ここで GitHub リポジトリを見つけることができます:https://github.com/ChristopherSchultz/fast-file-count
解決策 3:
ディレクトリ内のファイル数を再帰的にカウントしたい場合は、locate コマンドは私が知っている最速のものです。最新のデータベースがあると仮定します(毎日cronジョブを介してデフォルトでsudo更新データベースが作成されます)。ただし、 grepを回避すると、コマンドを高速化できます パイプ。
マンロケートを見る :
-c, --count
Instead of writing file names on standard output, write the number of
matching entries only.
したがって、最速のコマンドは次のとおりです:
locate -c -r '/path/to/dir'