Se você tiver isso em um sistema de arquivos dedicado, ou se tiver um número fixo de arquivos sobrecarregados, poderá obter uma contagem aproximada do número de arquivos observando o número de inodes no arquivo. sistema via "df -i":
root@dhcp18:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75885 60413843 1% /
Na minha caixa de teste acima eu tenho 75,885 inodes alocados. No entanto, esses inodes não são apenas arquivos, eles também são diretórios. Por exemplo:
root@dhcp18:~# mkdir /tmp/foo
root@dhcp18:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75886 60413842 1% /
root@dhcp18:~# touch /tmp/bar
root@dhcp18:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75887 60413841 1% /
NOTA: Nem todos os sistemas de arquivos mantêm contagens de inode da mesma maneira. ext2 / 3/4 irá funcionar, no entanto o btrfs sempre reporta 0.
Se você tem que diferenciar arquivos de diretórios, você terá que percorrer o sistema de arquivos e "stat" para ver se é um arquivo, diretório, sym-link, etc ... O maior problema aqui não é o encanamento de todo o texto para "wc", mas sim procurar entre todos os inodes e entradas de diretório para juntar esses dados.
Diferentemente da tabela de inodes, como mostrado por "df -i", não há realmente nenhum banco de dados de quantos arquivos existem em um determinado diretório. No entanto, se essa informação for importante para você, você poderá criar e manter um banco de dados fazendo com que seus programas incrementem um número quando criarem um arquivo nesse diretório e o decrescerem quando excluídos. Se você não controla os programas que os criam, isso não é uma opção.