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

0voto

du | sort -nr | awk '{ cmd = "du -h -d0 "$2"| cut -f1"; cmd | getline human; close(cmd); print human"\t"$2 }'

0voto

Mark Borgerding Points 2259

La solution suivante est similaire à l'originale de cadrian, mais elle ne lancera que 2 commandes du au lieu d'un du pour chaque répertoire de l'arbre.

du -hs `du |sort -g |cut -f2- `

Cependant, la solution de Cardrian est plus robuste car la solution ci-dessus ne fonctionnera pas pour les arbres très peuplés, car elle pourrait dépasser la limite de la taille des arguments passés à du.

0voto

Voici ma solution, un simple bash script qui n'appelle du une seule fois, et ne vous montre que les répertoires de taille 1 MB ou plus :

#!/bin/env bash
# Usage: my_du.sh [subdirectory levels]
#   For efficiency, only calls "du" once, and stores results in a temp file
#   Stephen Becker, 2/23/2010

if [ $# -gt 0 ]; then
# You may prefer, as I do, to just summarize the contents of a directory
# and not view the size of its subdirectories, so use this:
    du -h --max-depth $1 > temp_du_file
else
    du -h > temp_du_file
fi

# Show all directories of size > 1 GB:
cat temp_du_file | grep "^\([0-9]\|\.\)\+G" | sort -nr
# Show all directories of size > 1 MB:
cat temp_du_file | grep "^\([0-9]\|\.\)\+M" | sort -nr

rm temp_du_file

0voto

michael Points 384

Pourquoi ne pas jeter un autre chapeau dans l'anneau.... c'est une vieille question, mais voici un exemple qui est (principalement) pur Shell ShellscriptShell (fwiw) -- c'est-à-dire, juste bash et pas perl/Python/awk/etc. Donc, dans ce sens, il offre peut-être quelque chose de nouveau à la discussion (ou pas). Il calcule la taille du fichier une seule fois, mais imprime dans différentes unités (ma préférence). (La version non simplifiée comprend des getopts qui excluent "GB" si on le souhaite).

#!/bin/bash

printf -- ' %9s %9s %9s       %-30s\n' 'K'        'M'        'G'        'Path'
printf -- ' %9s %9s %9s       %-30s\n' '--------' '--------' '--------' '-----------'
du -sk "$@" | while read val; do
    file=$(echo "$val" | cut -f2-)
    size_k=$(echo "$val"  | cut -f1)
    printf ' %9s %9s %9s       %-30s\n' \
          ${size_k}  \
          $(( size_k / 1024 ))  \
          $(( size_k / 1024 / 1024 ))  \
          "$file"
  done | sort -n

0voto

Tagar Points 149

Voici l'alias que j'ai dans mon .profile

alias du='sudo du -xh --max-depth=1 | sort -h''.

sort -h est ce qui aide vraiment ici à la question posée.

D'autres options utiles sont du -x pour rester sur le même système de fichiers ; sudo permet également de ne pas voir d'erreurs s'il y a des répertoires qui ne sont pas lisibles par tous. De plus, je fais toujours du --max-depth=1, puis je creuse plus loin etc

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