Afficher la taille de chaque sous-répertoire dans un format de liste à l'aide de la commande d'une ligne dans Bash?

101

Je veux obtenir une liste des répertoires et leurs tailles dans un format de liste comme comment vous obtenez lorsque vous faites un ls -l.

La chose est-ce qu'il y a une commande d'une ligne qui peut faire ceci? Je vois que les autres ont de longues commandes juste pour sortir ceci. C'est trop long.

Quelle commande peut faire cela ou une combinaison de commandes faciles à saisir? du -hle donne, mais il affiche tous les sous-dossiers, ce qui n’est pas ce que je veux. juste les dossiers de répertoires actuels.

Patoshi ト シ
la source

Réponses:

72

Vous voulez probablement voir les répertoires classés par taille:

$ du -hs * | sort -hr

856M    lib
746M    share
612M    lib64
312M    src
267M    java
239M    bin
179M    sbin
173M    local
93M     i686-w64-mingw32
72M     libexec
26M     include
20M     puppet
772K    X11R6
20K     man
4.0K    games
4.0K    etc
0       tmp
Raychi
la source
Cela ne fonctionne pas s'il y a un grand nombre d'entrées dans le répertoire. bash: /run/current-system/sw/bin/du: Argument list too long
Chris Stryczynski le
123

Essaye ça

du -h --max-depth=1

Sortie

oliver@home:/usr$ sudo du -h --max-depth=1
24M     ./include
20M     ./sbin
228M    ./local
4.0K    ./src
520M    ./lib
8.0K    ./games
1.3G    ./share
255M    ./bin
2.4G    .

Alternative

Si --max-depth=1c'est un peu long à votre goût, vous pouvez aussi essayer d'utiliser:

du -h -s *

Ceci utilise -s( --summarize) et n'imprimera que la taille du dossier lui-même par défaut. En transmettant tous les éléments du répertoire de travail actuel ( *), le résultat obtenu est similaire à celui qui --max-depth=1suit:

Sortie

oliver@cloud:/usr$ sudo du -h -s *
255M    bin
8.0K    games
24M     include
520M    lib
0       lib64
228M    local
20M     sbin
1.3G    share
4.0K    src

La différence est subtile. L'ancienne approche affichera la taille totale du répertoire de travail actuel et la taille totale de tous les dossiers qu'il contient ... mais seulement jusqu'à une profondeur de 1.

Cette dernière approche calculera la taille totale de tous les éléments transmis individuellement . Ainsi, il inclut le lien symbolique lib64dans la sortie, mais exclut les éléments cachés (dont le nom commence par un point). Il manque également la taille totale du répertoire de travail actuel, car cela n’a pas été passé comme argument.

Der Hochstapler
la source
4
Réponse parfaite. Sous Mac OSX, le --depthparamètre n'est pas reconnu. Utilisez du -h -d 1pour le même résultat.
Dylan
6

Imprimez les tailles de tous les dossiers de fichiers et les fichiers cachés sur le disque:

el@dev /home/el $ du -sh `ls -a`
258M    .
265M    ..
4.0K    .classpath
258M    .git
4.0K    .gitignore
9.0K    nbactions.xml
12K     README
20K     .README.swp
4.0K    run.sh
23K    XmlPostPropagate.php
Eric Leschinski
la source
2
Mais méfiez-vous! Pourquoi vous ne devriez pas analyser la sortie de ls (1)
Kamil Maciorowski
2

Il convient de mentionner la commande shell NCurses Disk Usage .

Ncdu est un analyseur d'utilisation du disque avec une interface ncurses. Il est conçu pour rechercher des ressources d'espace sur un serveur distant sur lequel aucune configuration graphique n'est disponible, mais c'est un outil utile même sur des systèmes de bureau classiques. Ncdu se veut rapide, simple et facile à utiliser, et devrait pouvoir fonctionner dans n’importe quel environnement minimal semblable à POSIX où ncurses est installé.

Rayon
la source