1489 votes

Comment puis-je trier la sortie de du -h par taille ?

J'ai besoin d'obtenir une liste de sortie du lisible par l'homme.

Cependant, du n'a pas d'option "trier par taille", et le tuyautage à sort ne fonctionne pas avec l'indicateur de lisibilité humaine.

Par exemple, en courant :

du | sort -n -r 

Produit une utilisation du disque triée par taille (en ordre décroissant) :

du |sort -n -r
65108   .
61508   ./dir3
2056    ./dir4
1032    ./dir1
508     ./dir2

Cependant, en l'exécutant avec l'indicateur de lisibilité humaine, le tri ne se fait pas correctement :

du -h | sort -n -r

508K    ./dir2
64M     .
61M     ./dir3
2.1M    ./dir4
1.1M    ./dir1

Quelqu'un connaît-il un moyen de trier du -h par taille ?

0 votes

Voici une question très proche : serverfault.com/q/737537/35034

0 votes

Vous avez vu celui-ci ? unix.stackexchange.com/questions/4681/ Il s'agit d'un quasi-duplicata et il vaut de l'or. Vous faites une recherche normale du mais ajoutez le -h à l'option sort commande. Vous pouvez ajouter -rh afin que les plus grands soient les premiers dans le fichier, sinon vous devez tail pour voir les porcs de l'espace.

0 votes

Voir aussi superuser.com/questions/300606/ pour une alternative plus conviviale ( ncdu ).

16voto

lukmansh Points 1

Trier les fichiers par taille en Mo

du --block-size=MiB --max-depth=1 path | sort -n

11voto

Michael Deardeuff Points 3425

Je dispose d'une enveloppe Python simple mais utile pour du appelée dutop . Notez que nous (les mainteneurs de coreutils) envisageons d'ajouter la fonctionnalité de tri pour trier directement la sortie "humaine".

1 votes

+1 pour l'une des rares exceptions valables à la règle "faites une chose et faites-la bien". À moins que quelqu'un ne parvienne à comprendre le préfixe SI et/ou les préfixes binaires.

0 votes

Et comme ptman le mentionne ci-dessous : Ta da ! (nouveau sort drapeau)

11voto

0x89 Points 6095

J'en ai un autre :

$ du -B1 | sort -nr | perl -MNumber::Bytes::Human=format_bytes -F'\t' -lane 'print format_bytes($F[0])."\t".$F[1]'

Je commence à aimer perl. Tu pourrais avoir à faire un

$ cpan Number::Bytes::Human

premièrement. A tous les hackers perl qui sont là : Oui, je sais que la partie tri peut aussi être faite en perl. Probablement la partie du, aussi.

10voto

Bozojoe Points 567

Ce passage a été arraché sans vergogne à "Jean-Pierre" de http://www.unix.com/Shell-programming-scripting/32555-du-h-sort.html . Y a-t-il un moyen de mieux le créditer ?

du -k | sort -nr | awk '
     BEGIN {
        split("KB,MB,GB,TB", Units, ",");
     }
     {
        u = 1;
        while ($1 >= 1024) {
           $1 = $1 / 1024;
           u += 1
        }
        $1 = sprintf("%.1f %s", $1, Units[u]);
        print $0;
     }
    '

0 votes

Je pense que si c'est un très grand nombre, alors l'unité est partie et le nombre affiché est petit... essayez... 23423423432423

9voto

Mick T Points 129

Utilisez l'option "-g".

 -g, --general-numeric-sort
              compare according to general numerical value

Et sur mon répertoire /usr/local, le résultat est le suivant :

$ du |sort -g

0   ./lib/site_ruby/1.8/rubygems/digest
20  ./lib/site_ruby/1.8/rubygems/ext
20  ./share/xml
24  ./lib/perl
24  ./share/sgml
44  ./lib/site_ruby/1.8/rubygems/package
44  ./share/mime
52  ./share/icons/hicolor
56  ./share/icons
112 ./share/perl/5.10.0/YAML
132 ./lib/site_ruby/1.8/rubygems/commands
132 ./share/man/man3
136 ./share/man
156 ./share/perl/5.10.0
160 ./share/perl
488 ./share
560 ./lib/site_ruby/1.8/rubygems
604 ./lib/site_ruby/1.8
608 ./lib/site_ruby

5 votes

Mais cela ne donne pas une sortie lisible par l'homme, ce qui est ce que le PO recherchait.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X