Questo viene ripubblicato da qui su richiesta del richiedente:
du --inodes -S | sort -rh | sed -n \
'1,50{/^.\{71\}/s/^\(.\{30\}\).*\(.\{37\}\)$/\1...\2/;p}'
E se vuoi rimanere nello stesso filesystem fai:
du --inodes -xS
Ecco alcuni esempi di output:
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
ORA CON LS:
Diverse persone hanno affermato di non avere coreutils aggiornati e l'opzione --inodes non è disponibile per loro. Quindi, ecco ls:
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 sei curioso, il cuore e l'anima di quel noioso pezzo di regex
lì sta sostituendo il filename
in ognuno dei ls's
risultati di ricerca ricorsivi con il nome della directory in cui è stato trovato. Da lì si tratta solo di spremere numeri di inode ripetuti, quindi contare i nomi di directory ripetuti e ordinare di conseguenza.
L' -U
opzione è particolarmente utile con l'ordinamento in quanto non ordina in modo specifico e presenta invece l'elenco di directory nell'ordine originale o, in altre parole, in base al inode
numero.
E, naturalmente, -1
è incredibilmente utile in quanto garantisce un singolo risultato per riga, indipendentemente da eventuali nuove righe incluse nei nomi dei file o da altri problemi incredibilmente sfortunati che potrebbero verificarsi quando si tenta di analizzare un elenco.
E ovviamente -A
per tutti e -i
per inode e -R
ricorsivi e questo è il lungo e il corto.
Il metodo alla base di questo è quello di sostituire tutti i nomi di file di ls con il nome della directory contenente in sed. In seguito a quello ... Beh, sono un po 'sfocato anch'io. Sono abbastanza certo che sta contando accuratamente i file, come puoi vedere qui:
% _ls_i ~/test
> 100 /home/mikeserv/test/realdir
> 2 /home/mikeserv/test
> 1 /home/mikeserv/test/linkdir
Questo mi sta fornendo risultati praticamente identici al 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:
Penso che la include
cosa dipenda solo dalla directory in cui il programma guarda prima - perché sono gli stessi file e hardlinked. Piace la cosa sopra. Potrei sbagliarmi però - e accolgo con favore la correzione ...
DU DEMO
% du --version
> du (GNU coreutils) 8.22
Crea una directory di prova:
% mkdir ~/test ; cd ~/test
% du --inodes -S
> 1 .
Alcune directory per bambini:
% mkdir ./realdir ./linkdir
% du --inodes -S
> 1 ./realdir
> 1 ./linkdir
> 1 .
Crea alcuni file:
% printf 'touch ./realdir/file%s\n' `seq 1 100` | . /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Alcuni hardlink:
% printf 'n="%s" ; ln ./realdir/file$n ./linkdir/link$n\n' `seq 1 100` |
. /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Guarda i collegamenti:
% cd ./linkdir
% du --inodes -S
> 101
% cd ../realdir
% du --inodes -S
> 101
Sono contati da soli, ma vanno in alto di una directory ...
% cd ..
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Quindi ho eseguito il mio script run dal basso e:
> 100 /home/mikeserv/test/realdir
> 100 /home/mikeserv/test/linkdir
> 2 /home/mikeserv/test
E Graeme's:
> 101 ./realdir
> 101 ./linkdir
> 3 ./
Quindi penso che ciò dimostri che l'unico modo per contare gli inode è l'inode. E poiché contare i file significa contare gli inode, non è possibile contare doppiamente gli inode - per contare i file con precisione gli inode non possono essere conteggiati più di una volta.