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 regex
estão substituindo os resultados de pesquisa recursivos filename
em cada um dos ls's
resultados 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 -U
opçã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 inode
nú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, -A
para todos, -i
para o inode e -R
para 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 du
comando:
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 include
coisa 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.