Isso é publicado aqui a pedido do autor:
du --inodes -S | sort -rh | sed -n \
'1,50{/^.\{71\}/s/^\(.\{30\}\).*\(.\{37\}\)$/\1...\2/;p}'
E se você quiser permanecer no mesmo sistema de arquivos, faça:
du --inodes -xS
Aqui está um exemplo de saída:
15K /usr/share/man/man3
4.0K /usr/lib
3.6K /usr/bin
2.4K /usr/share/man/man1
1.9K /usr/share/fonts/75dpi
...
519 /usr/lib/python2.7/site-packages/bzrlib
516 /usr/include/KDE
498 /usr/include/qt/QtCore
487 /usr/lib/modules/3.13.6-2-MANJARO/build/include/config
484 /usr/src/linux-3.12.14-2-MANJARO/include/config
AGORA COM LS:
Várias pessoas mencionaram que não possuem coreutils atualizados e a opção --inodes não está disponível para eles. Então, aqui está o sl:
ls ~/test -AiR1U |
sed -rn '/^[./]/{h;n;};G;
s|^ *([0-9][0-9]*)[^0-9][^/]*([~./].*):|\1:\2|p' |
sort -t : -uk1.1,1n |
cut -d: -f2 | sort -V |
uniq -c |sort -rn | head -n10
Se você estiver curioso, o coração e a alma desse pedaço tedioso regexestão substituindo os resultados de pesquisa recursivos filenameem cada um dos ls'sresultados pelo nome do diretório em que foram encontrados. A partir daí, é apenas uma questão de espremer números de inodes repetidos e, em seguida, contar nomes de diretórios repetidos e classificar de acordo.
A -Uopção é especialmente útil na classificação em que ela especificamente não é classificada e, em vez disso, apresenta a lista de diretórios na ordem original - ou, em outras palavras, pelo inodenúmero.
E, -1é claro, é incrivelmente útil, pois garante um único resultado por linha, independentemente de novas linhas possivelmente incluídas nos nomes de arquivos ou outros problemas espetacularmente infelizes que podem ocorrer quando você tenta analisar uma lista.
E, é claro, -Apara todos, -ipara o inode e -Rpara o recursivo, e esse é o longo e curto disso.
O método subjacente a isso é que eu substituo todos os nomes de arquivos de ls pelo seu nome de diretório que contém sed. Na sequência disso ... Bem, estou um pouco confusa. Tenho certeza de que está contando com precisão os arquivos, como você pode ver aqui:
% _ls_i ~/test
> 100 /home/mikeserv/test/realdir
> 2 /home/mikeserv/test
> 1 /home/mikeserv/test/linkdir
Isso está me fornecendo resultados praticamente idênticos ao ducomando:
DU:
15K /usr/share/man/man3
4.0K /usr/lib
3.6K /usr/bin
2.4K /usr/share/man/man1
1.9K /usr/share/fonts/75dpi
1.9K /usr/share/fonts/100dpi
1.9K /usr/share/doc/arch-wiki-markdown
1.6K /usr/share/fonts/TTF
1.6K /usr/share/dolphin-emu/sys/GameSettings
1.6K /usr/share/doc/efl/html
LS:
14686 /usr/share/man/man3:
4322 /usr/lib:
3653 /usr/bin:
2457 /usr/share/man/man1:
1897 /usr/share/fonts/100dpi:
1897 /usr/share/fonts/75dpi:
1890 /usr/share/doc/arch-wiki-markdown:
1613 /usr/include:
1575 /usr/share/doc/efl/html:
1556 /usr/share/dolphin-emu/sys/GameSettings:
Eu acho que a includecoisa depende apenas de qual diretório o programa parece primeiro - porque eles são os mesmos arquivos e têm links físicos. Tipo como a coisa acima. Eu posso estar errado sobre isso - e congratulo-me com a correção ...
DU DEMO
% du --version
> du (GNU coreutils) 8.22
Faça um diretório de teste:
% mkdir ~/test ; cd ~/test
% du --inodes -S
> 1 .
Alguns diretórios filhos:
% mkdir ./realdir ./linkdir
% du --inodes -S
> 1 ./realdir
> 1 ./linkdir
> 1 .
Faça alguns arquivos:
% printf 'touch ./realdir/file%s\n' `seq 1 100` | . /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Alguns hardlinks:
% printf 'n="%s" ; ln ./realdir/file$n ./linkdir/link$n\n' `seq 1 100` |
. /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Veja os hardlinks:
% cd ./linkdir
% du --inodes -S
> 101
% cd ../realdir
% du --inodes -S
> 101
Eles são contados sozinhos, mas sobe um diretório ...
% cd ..
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Em seguida, executei meu script de baixo e:
> 100 /home/mikeserv/test/realdir
> 100 /home/mikeserv/test/linkdir
> 2 /home/mikeserv/test
E Graeme's:
> 101 ./realdir
> 101 ./linkdir
> 3 ./
Então, acho que isso mostra que a única maneira de contar inodes é por inode. E como contar arquivos significa contar inodes, você não pode contar inodes duplamente - contar arquivos com inodes com precisão não pode ser contado mais de uma vez.