Como posso encontrar o número de arquivos em um sistema de arquivos?

26

Quero saber quantos arquivos tenho no meu sistema de arquivos. Eu sei que posso fazer algo assim:

find / -type f | wc -l

Isso parece altamente ineficiente. O que eu realmente gostaria de fazer é encontrar o número total de inodes exclusivos que são considerados um 'arquivo'.

Existe uma maneira melhor?

Nota:

Gostaria de fazer isso porque estou desenvolvendo um programa de sincronização de arquivos e gostaria de fazer algumas análises estatísticas (como quantos arquivos o usuário médio tem no total versus quantos arquivos estão no sistema). No entanto, não preciso saber nada sobre esses arquivos, apenas que eles existem (os caminhos não importam nada). Gostaria especialmente de saber essas informações para cada sistema de arquivos montado (e seu ponto de montagem associado).

beatgammit
fonte

Respostas:

34

A opção --inodes para dfinformará quantos inodes estão reservados para uso. Por exemplo:

$ 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

Observe que o número de entradas retornadas findé maior que IUsedpara o sistema de arquivos raiz (/), mas é menor para / home. Mas ambos estão dentro de 0,0005%. O motivo das discrepâncias é por causa de links físicos e situações semelhantes.

Lembre-se de que diretórios, links simbólicos, soquetes de domínio UNIX e pipes nomeados são todos 'arquivos' no que se refere ao sistema de arquivos. Portanto, o uso da find -type fflag é extremamente impreciso, do ponto de vista estatístico.

Arcege
fonte
Eu acho que é isso que estou procurando. Existe alguma maneira de descobrir quantos de cada tipo de arquivo existe? Isso não é diretamente necessário para meu aplicativo, mas pode ser um conhecimento útil.
beatgammit 18/09/11
11
Não sem inspecionar os inodes de cada arquivo no sistema de arquivos, que seria o mesmo que fazer a localização.
Arcege 18/09/11
O df entende a maioria dos sistemas de arquivos (ext2-4, ntfs, fat, reiserfs, etc)?
Beatgammit 18/09/11
Ele entenderia qualquer tipo de sistema de arquivos que pudesse ser montado. Alguns tipos de sistema de arquivos não possuem inodes (por exemplo, gordura); dfexibirá o número total de inodes como 0 nesses sistemas de arquivos. Outros tipos devem mostrar as estatísticas de inode do sistema de arquivos subjacente.
Arcege 18/09/11
Você precisaria redirecionar os erros para /dev/nullver as linhas avisando que os arquivos /procsão "virtuais"?
n0pe
2

Use statvfs()e calcule f_files - f_ffree.

Chris Down
fonte