2010-07-11 17:26:29 +0000 2010-07-11 17:26:29 +0000
316
316

Comment obtenir les tailles résumées 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. Lorsque j'utilise ls -la, je n'obtiens pas vraiment la taille résumée des répertoires.

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 tout le système de fichiers.

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

Réponses (9)

450
450
450
2010-07-11 17:28:23 +0000

Ceci fait ce que vous cherchez :

du -sh /*

Ce que cela signifie :

  • -s pour ne donner que le total de chaque argument de la ligne de commande.
  • -h pour les suffixes lisibles par l'homme comme M pour les mégaoctets et G pour les gigaoctets (facultatif).

- /* s'étend simplement à tous les répertoires (et fichiers) dans /.

Il est également utile de trier par taille :

du -sh /* | sort -h

Ici :

  • -h s'assure que sort interprète correctement les suffixes lisibles par l'homme.
84
84
84
2010-07-29 12:07:31 +0000

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

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

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

24
24
24
2015-12-24 10:07:52 +0000

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

12
12
12
2012-11-22 16:53:04 +0000

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

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

  2. Très similaire à la première réponse et presque le même résultat que 1.), mais il m'a fallu un certain temps pour comprendre la différence entre * et ./* si dans un sous-répertoire :

9
9
9
2010-07-11 17:29:10 +0000

L'invocation suivante du devrait fonctionner sur les systèmes BSD :

du -d 1 /
5
5
5
2015-07-24 11:04:13 +0000

Ce n'est pas facile. La commande du affiche soit les fichiers et les dossiers (par défaut), soit simplement les tailles de tous les éléments que vous spécifiez sur la ligne de commande (option -s).

Pour obtenir les plus grands éléments (fichiers et dossiers), triés, avec des tailles lisibles par l'homme sous Linux :

du -h | sort -h

Cela vous enterrera dans une tonne de petits fichiers. Vous pouvez vous en débarrasser avec --threshold (1 MB dans mon exemple) :

du --threshold=1M -h | sort -h

L'avantage de cette commande est qu'elle inclut des dossiers cachés (dossiers qui commencent par .).

Si vous ne voulez vraiment que les dossiers, vous devez utiliser find mais cela peut être très, très lent puisque du devra scanner plusieurs fois de nombreux dossiers :

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h
2
2
2
2013-10-05 15:36:58 +0000

Soyez conscient que vous ne pouvez pas comparer les répertoires avec du sur différents systèmes/machines sans être sûr que les deux partagent la même taille de bloc du système de fichiers. Cela peut compter si vous rsyncnez des fichiers d'une machine linux vers une machine nas et que vous voulez comparer le répertoire synchronisé par vous-même. Vous pourriez obtenir des résultats différents avec du à cause des différentes tailles de bloc….

1
1
1
2010-07-12 19:42:17 +0000

Vous pouvez également consulter le site xdiskusage . Vous obtiendrez les mêmes informations, mais présentées sous forme de graphique, et vous pourrez en outre effectuer des recherches plus approfondies (très utile). Il existe d'autres utilitaires similaires pour KDE et même pour Windows.

1
1
1
2016-12-20 09:56:34 +0000

Vous pouvez utiliser ls en conjonction avec awk :

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

La sortie de ls est transmise à awk. awk commence à traiter les données. Le délimiteur standard est l'espace. La variable de somme tot est initialisée à zéro ; l'instruction suivante est exécutée pour chaque ligne/ligne produite par ls. Elle incrémente simplement tot avec la taille. $5 représente la cinquième colonne (produite par ls). À la fin, nous divisons par (1024*1024) pour obtenir la somme en mégaoctets.

Si vous souhaitez convertir ceci en un script ou une fonction (.bashrc), vous pouvez également l'utiliser pour obtenir la taille de certains sous-ensembles de répertoires, selon les types de fichiers.

Si vous voulez des informations à l'échelle du système, kdirstat peut s'avérer utile !