Com o GNU coreutils (Linux, Cygwin) desde a versão 8.22, você pode usar du --inodes
, como apontado por lcd047.
Se você não tem coreutils GNU recentes, e não há hard links na árvore ou não importa se eles são contados uma vez por link, você pode obter os mesmos números filtrando a saída de find
. Se você quiser o equivalente a du -s
, ou seja, apenas diretórios de nível superior, tudo o que você precisa é contar o número de linhas com cada nome de diretório de nível superior. Supondo que não haja novas linhas em nomes de arquivos e que você queira apenas diretórios não pontuais no diretório atual:
find */ | sed 's!/.*!!' | uniq -c
Se você deseja mostrar a saída para todos os diretórios, com a contagem de cada diretório, incluindo seus subdiretórios, você precisa executar alguma aritmética.
find . -depth | awk '{
# Count the current depth in the directory tree
slashes = $0; gsub("[^/]", "", slashes); current_depth = length(slashes);
# Zero out counts for directories we exited
for (i = previous_depth; i <= current_depth; i++) counts[i] = 0;
# Count 1 for us and all our parents
for (i = 0; i <= current_depth; i++) ++counts[i];
# We don´t know which are regular files and which are directories.
# Non-directories will have a count of 1, and directories with a
# count of 1 are boring, so print only counts above 1.
if (counts[current_depth] > 1) printf "%d\t%s\n", counts[current_depth], $0;
# Get ready for the next round
previous_depth = current_depth;
}'