Ceci est republié d' ici à la demande du demandeur:
du --inodes -S | sort -rh | sed -n \
'1,50{/^.\{71\}/s/^\(.\{30\}\).*\(.\{37\}\)$/\1...\2/;p}'
Et si vous voulez rester dans le même système de fichiers que vous faites:
du --inodes -xS
Voici quelques exemples de résultats:
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
MAINTENANT AVEC LS:
Plusieurs personnes ont mentionné qu'elles n'avaient pas de coreutils à jour et que l'option --inodes n'était pas disponible pour elles. Alors, voici 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
Si vous êtes curieux, le cœur de cette tâche fastidieuse regex
consiste à remplacer les résultats de recherche récursifs filename
de chacun des ls's
résultats de recherche récursifs par le nom du répertoire dans lequel ils ont été trouvés. À partir de là, il suffit de serrer les numéros d'inode répétés, puis de compter les noms de répertoire répétés et de les trier en conséquence.
Cette -U
option est particulièrement utile pour le tri car elle ne trie pas et présente plutôt la liste de répertoires dans l’ordre original ou, en d’autres termes, par inode
numéro.
Et bien sûr, cela -1
est extrêmement utile dans la mesure où il garantit un seul résultat par ligne, quels que soient les retours à la ligne éventuellement inclus dans les noms de fichiers ou d’autres problèmes spectaculaires qui peuvent survenir lorsque vous essayez d’analyser une liste.
Et bien sûr -A
pour tous et -i
pour inode et -R
pour récursif et c’est tout.
La méthode sous-jacente à ceci est que je remplace chacun des noms de fichiers de ls par son nom de répertoire contenu dans sed. Suite à cela ... Eh bien, je suis moi-même un peu floue. Je suis à peu près certain que les fichiers sont comptés avec précision, comme vous pouvez le voir ici:
% _ls_i ~/test
> 100 /home/mikeserv/test/realdir
> 2 /home/mikeserv/test
> 1 /home/mikeserv/test/linkdir
Ceci me fournit des résultats à peu près identiques à la du
commande:
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:
Je pense que la include
chose dépend simplement du répertoire dans lequel le programme se penche en premier - car ce sont les mêmes fichiers et les liens fixes. Un peu comme la chose ci-dessus. Je peux toutefois me tromper à ce sujet - et je me réjouis de la correction ...
DU DEMO
% du --version
> du (GNU coreutils) 8.22
Faire un répertoire de test:
% mkdir ~/test ; cd ~/test
% du --inodes -S
> 1 .
Quelques annuaires d'enfants:
% mkdir ./realdir ./linkdir
% du --inodes -S
> 1 ./realdir
> 1 ./linkdir
> 1 .
Faire des fichiers:
% printf 'touch ./realdir/file%s\n' `seq 1 100` | . /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Quelques liens durs:
% printf 'n="%s" ; ln ./realdir/file$n ./linkdir/link$n\n' `seq 1 100` |
. /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Regardez les liens durs:
% cd ./linkdir
% du --inodes -S
> 101
% cd ../realdir
% du --inodes -S
> 101
Ils sont comptés seuls, mais allez un répertoire en place ...
% cd ..
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Puis j'ai couru mon script run d'en bas et:
> 100 /home/mikeserv/test/realdir
> 100 /home/mikeserv/test/linkdir
> 2 /home/mikeserv/test
Et Graeme's:
> 101 ./realdir
> 101 ./linkdir
> 3 ./
Donc, je pense que cela montre que le seul moyen de compter les inodes est par inode. Et comme le fait de compter les fichiers signifie de compter les inodes, vous ne pouvez pas compter deux fois les inodes - pour compter les fichiers avec précision, les inodes ne peuvent pas être comptés plus d'une fois.