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 ).

2105voto

ptman Points 26336

A partir de GNU coreutils 7.5 publié en août 2009, sort permet à un -h qui permet des suffixes numériques du type de ceux produits par du -h :

du -hs * | sort -h

Si vous utilisez une sorte qui ne supporte pas -h vous pouvez installer GNU Coreutils. Par exemple, sur un ancien Mac OS X :

brew install coreutils
du -hs * | gsort -h

Desde sort manuel :

-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)

4 votes

La section pertinente du manuel : gnu.org/software/coreutils/manuel/

32 votes

Facile à installer sur OS X avec homebrew -- brew install coreutils.

1 votes

Wow, merci. Beaucoup mieux que mon evergreen du -sk * | sort -n

111voto

Helephant Points 4085
du | sort -nr | cut -f2- | xargs du -hs

60 votes

Et il fera une énorme quantité de comptage de doublons.

0 votes

Cela aiderait si vous expliquiez pourquoi cela fonctionne ? ??

1 votes

Il fait d'abord le du normal - puis pour chaque entrée il recalcule la taille juste pour l'imprimer dans une forme lisible par l'homme.

88voto

Il existe un outil extrêmement utile que j'utilise et qui s'appelle ncdu qui est conçu pour trouver les dossiers et fichiers qui consomment beaucoup de disque et les supprimer. Il est basé sur une console, rapide et léger, et dispose de paquets pour toutes les distributions majeures.

0 votes

Très bien... Je me demande si les résultats peuvent être transmis à un standard... Je suis tellement paresseux que je ne peux pas lire le manuel.

8 votes

gt5 est dans la même veine ; sa caractéristique principale est l'affichage de la croissance.

2 votes

C'est vraiment cool ! Et beaucoup plus rapide que de traîner avec du si vous souhaitez uniquement identifier les grands répertoires.

71voto

Adam Bellaire Points 1170

@Douglas Leeder, une autre réponse : Triez la sortie lisible par l'homme de du -h en utilisant un autre outil. Comme Perl !

du -h | perl -e 'sub h{%h=(K=>10,M=>20,G=>30);($n,$u)=shift=~/([0-9.]+)(\D)/;
return $n*2**$h{$u}}print sort{h($b)<=>h($a)}<>;'

Diviser sur deux lignes pour s'adapter à l'affichage. Vous pouvez l'utiliser de cette façon ou en faire une ligne unique, cela fonctionnera dans les deux cas.

Sortie :

4.5M    .
3.7M    ./colors
372K    ./plugin
128K    ./autoload
100K    ./doc
100K    ./syntax

EDIT : Après quelques parties de golf à PerlMonks le résultat final est le suivant :

perl -e'%h=map{/.\s/;99**(ord$&&7)-$`,$_}`du -h`;die@h{sort%h}'

2 votes

Vos sorties de version courte sur stderr en raison de la die pouvez-vous le changer pour qu'il sorte sur stdout ?

2 votes

Changez le die à un print et il ira à stdout . C'est juste deux personnages de plus.

0 votes

Fonctionne sur ubuntu !

48voto

du -k * | sort -nr | cut -f2 | xargs -d '\n' du -sh

0 votes

Ne peut pas être utilisé avec du -k --total donne une erreur à la fin du: cannot access 'total': No such file or directory

0 votes

Je préfère cette réponse à toutes les autres. comment faire pour n'afficher que les 50 premiers résultats ?

1 votes

@Mauro -- il suffit d'envoyer le résultat à head en ajoutant ` | head -50` à la fin.

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