Как я могу найти количество файлов в файловой системе?

26

Я хочу знать, сколько файлов у меня в файловой системе. Я знаю, что могу сделать что-то вроде этого:

find / -type f | wc -l

Это кажется крайне неэффективным. Что я действительно хотел бы сделать, так это найти общее количество уникальных инодов, которые считаются «файлами».

Есть ли способ лучше?

Заметка:

Я хотел бы сделать это, потому что я разрабатываю программу синхронизации файлов, и я хотел бы провести некоторый статистический анализ (например, сколько файлов у обычного пользователя по сравнению с тем, сколько файлов в системе). Однако мне не нужно ничего знать об этих файлах, просто о том, что они существуют (пути вообще не имеют значения). Мне особенно хотелось бы знать эту информацию для каждой смонтированной файловой системы (и связанной с ней точки монтирования).

beatgammit
источник

Ответы:

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флага крайне неточно с точки зрения статистики.

Arcege
источник
Я думаю, это то, что я ищу. Есть ли способ узнать, сколько существует файлов каждого типа? Это не требуется напрямую моему приложению, но может быть полезным знанием.
beatgammit
1
Не без проверки inode каждого файла в файловой системе, что было бы примерно так же, как и при поиске.
Arcege
Df понимает большинство файловых систем (ext2-4, ntfs, fat, reiserfs и т. Д.)?
ритммит
Он понимает любой тип файловой системы, который может быть смонтирован. Некоторые типы файловых систем не имеют inode (например, fat); dfбудет отображать общее количество inode как 0 в этих файловых системах. Другие типы должны показывать статистику inode базовой файловой системы.
Arcege
Придется ли вам перенаправлять ошибки на /dev/nullпросмотр, как если бы вы получили строки, предупреждающие о том, что файлы /procявляются «виртуальными»?
n0pe