392 votes

Comment obtenir les tailles récapitulatives des répertoires et de leurs sous-répertoires ?

Disons que je veux obtenir la taille de chaque répertoire d'un système de fichiers Linux. Quand j'utilise ls -la, je n'obtiens pas vraiment la taille résumée des dossiers.

Si j'utilise df, j'obtiens la taille de chaque système de fichiers monté mais cela ne m'aide pas non plus. Et avec du, j'obtiens la taille de chaque sous-répertoire et le résumé de l'ensemble du système de fichiers.

Mais je veux avoir uniquement la taille résumée de chaque répertoire dans le dossier ROOT du système de fichiers. Y a-t-il une commande pour y parvenir?

1 votes

Le drapeau --total m'a été utile. Par exemple du -sh --total applications/*. askubuntu.com/a/465436/48214

563voto

Thomas Points 5819

Ceci fait ce que vous cherchez :

du -sh /*

Ce que cela signifie :

  • -s pour afficher uniquement le total de chaque argument de ligne de commande.
  • -h pour des suffixes lisibles par l'homme comme M pour mégaoctets et G pour gigaoctets (optionnel).
  • /* se développe simplement à tous les répertoires (et fichiers) dans /.

    Remarque : les fichiers de configuration ne sont pas inclus ; exécutez shopt -s dotglob pour les inclure également.

Aussi utile est le tri par taille :

du -sh /* | sort -h

Ici :

  • -h veille à ce que sort interprète correctement les suffixes lisibles par l'homme.

9 votes

Si vous avez des dot-directories dans le répertoire racine, vous pouvez utiliser shopt -s dotglob pour les inclure dans le compte.

13 votes

C'est très utile, car c'est simple et vous pouvez placer le chemin que vous voulez à la place de /*, par exemple ./ pour le répertoire actuel ou ./* pour chaque élément dans le répertoire actuel.

5 votes

@psur ou vous pouvez utiliser ./*/ pour obtenir uniquement les sous-dossiers et non pas tous les éléments

94voto

Janne Pikkarainen Points 7357

Je dois souvent trouver les plus grands répertoires, donc pour obtenir une liste triée contenant les 20 plus grands dossiers, je fais ceci :

du -m /some/path | sort -nr | head -n 20

Dans ce cas, les tailles seront rapportées en mégaoctets.

16 votes

Voici un moyen de le rendre plus lisible du -sh /some/path | sort -hr | head -n 20

7 votes

@Xedecima le problème en utilisant h est le tri ne sait pas comment gérer les tailles différentes. Par exemple, 268K est trié plus haut que 255M et les deux sont triés plus haut que 2,7G

5 votes

L'argument -h (lisible par l'humain) sur la commande 'sort' devrait lire correctement ces valeurs. Tout comme le drapeau -h de du les exporte. Selon ce que vous exécutez, je suppose.

30voto

J Kao Points 338

J'aime utiliser Ncdu pour cela, vous pouvez utiliser le curseur pour naviguer et explorer la structure du répertoire, cela fonctionne vraiment bien.

1 votes

Incroyable. Mots-clés : du meets ncurses. Vous pouvez utiliser b pour accéder à un shell dans le répertoire.

18voto

Martin Points 245

Les réponses existantes sont très utiles, peut-être que certains débutants (comme moi) trouveront cela également utile.

  1. Boucle très basique, mais pour moi c'était un bon début pour quelques opérations liées à la taille :

    for each in $(ls) ; do du -hs "$each" ; done
  2. Très similaire à la première réponse et presque le même résultat que 1.), mais cela m'a pris du temps pour comprendre la différence de * à ./* si dans un sous-répertoire :

    du -sh ./*

0 votes

pour chaque ne fonctionne pas car il ajoute des caractères de console (par exemple \033[) à la liste des dossiers

0 votes

@machinaddict je ne suis pas sûr de ce que vous voulez dire. Je l'utilise tout le temps, ça fonctionne très bien pour moi.

0 votes

Essayez d'exécuter votre commande en commençant par pour chaque. cela ne fonctionnera pas

10voto

Haakon Points 1119

La commande suivante du devrait fonctionner sur les systèmes BSD :

du -d 1 /

2 votes

Mon du (Ubuntu 10.4) n'a pas d'option -d. Sur quel système êtes-vous?

1 votes

Sur mon openSUSE, il n'y a pas non plus d'option -d :(

1 votes

D'accord, alors c'est une option BSD uniquement (je suis sur OS X).

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