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

24

Eu quero saber quantos arquivos eu 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 únicos que são considerados um 'arquivo'.

Existe uma maneira melhor?

Nota:

Eu 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). Eu não preciso, no entanto, saber nada sobre esses arquivos, apenas que eles existem (caminhos não importam). Eu gostaria especialmente de saber essas informações para cada sistema de arquivos montado (e seu ponto de montagem associado).

    
por beatgammit 18.09.2011 / 01:47

2 respostas

31

A opção --inodes para df informará 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 de find é maior que IUsed para o sistema de arquivos raiz (/), mas é menor para / home. Mas ambos estão dentro de 0,0005%. A razão para as discrepâncias é por causa de links físicos e situações semelhantes.

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

    
por 18.09.2011 / 02:36
2

Use statvfs() e calcule f_files - f_ffree .

    
por 18.09.2011 / 02:51