Dies wird von hier aus auf Geheiß des Fragestellers neu gepostet:
du --inodes -S | sort -rh | sed -n \
'1,50{/^.\{71\}/s/^\(.\{30\}\).*\(.\{37\}\)$/\1...\2/;p}'
Und wenn Sie im selben Dateisystem bleiben möchten, tun Sie Folgendes:
du --inodes -xS
Hier ist ein Beispiel für die Ausgabe:
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
JETZT MIT LS:
Einige Personen gaben an, dass sie keine aktuellen coreutils haben und die Option --inodes für sie nicht verfügbar ist. Also, hier ist 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
Wenn Sie neugierig sind, die Herz-und-Seele dieser langweilig bisschen regex
es ersetzt die filename
in jedem der ls's
rekursiven Suchergebnisse mit dem Verzeichnisnamen , in dem es gefunden wurde. Von da an müssen Sie nur nochmalige Inode-Nummern auspressen, dann nochmalige Verzeichnisnamen zählen und entsprechend sortieren.
Die -U
Option ist besonders hilfreich bei der Sortierung, da sie die Verzeichnisliste nicht speziell sortiert, sondern in der ursprünglichen Reihenfolge - oder mit anderen Worten nach inode
Nummer - anzeigt.
Und das ist natürlich -1
unglaublich hilfreich, da es ein einziges Ergebnis pro Zeile sicherstellt, unabhängig davon, ob möglicherweise neue Zeilen in den Dateinamen enthalten sind oder andere auffallend unglückliche Probleme, die auftreten können, wenn Sie versuchen, eine Liste zu analysieren.
Und natürlich -A
für alle und -i
für inode und -R
für rekursiv und das ist das lange und kurze.
Die zugrunde liegende Methode besteht darin, dass ich jeden Dateinamen von ls durch den darin enthaltenen Verzeichnisnamen in sed ersetze. Daran anknüpfen ... Nun, ich bin selbst ein bisschen verschwommen. Ich bin mir ziemlich sicher, dass die Dateien genau gezählt werden, wie Sie hier sehen können:
% _ls_i ~/test
> 100 /home/mikeserv/test/realdir
> 2 /home/mikeserv/test
> 1 /home/mikeserv/test/linkdir
Dies liefert mir ziemlich identische Ergebnisse wie der du
Befehl:
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:
Ich denke, die include
Sache hängt nur davon ab, auf welches Verzeichnis das Programm zuerst schaut - weil sie die gleichen Dateien und fest verbunden sind. Irgendwie gefällt mir das Ding oben. Daran könnte ich mich jedoch irren - und ich begrüße die Korrektur ...
DU DEMO
% du --version
> du (GNU coreutils) 8.22
Erstellen Sie ein Testverzeichnis:
% mkdir ~/test ; cd ~/test
% du --inodes -S
> 1 .
Einige Kinderverzeichnisse:
% mkdir ./realdir ./linkdir
% du --inodes -S
> 1 ./realdir
> 1 ./linkdir
> 1 .
Machen Sie einige Dateien:
% printf 'touch ./realdir/file%s\n' `seq 1 100` | . /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Einige 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 .
Schauen Sie sich die Hardlinks an:
% cd ./linkdir
% du --inodes -S
> 101
% cd ../realdir
% du --inodes -S
> 101
Sie werden alleine gezählt, gehen aber ein Verzeichnis hoch ...
% cd ..
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Dann habe ich mein Skript von unten ausgeführt und:
> 100 /home/mikeserv/test/realdir
> 100 /home/mikeserv/test/linkdir
> 2 /home/mikeserv/test
Und Graemes:
> 101 ./realdir
> 101 ./linkdir
> 3 ./
Ich denke, das zeigt, dass der einzige Weg, Inodes zu zählen, der Inode ist. Und weil das Zählen von Dateien das Zählen von Inodes bedeutet, können Sie Inodes nicht doppelt zählen - um Dateien genau zu zählen, können Inodes nicht mehr als einmal gezählt werden.