Question 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. Quand j'utilise ls -la Je n'ai 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 seulement avoir 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?


259
2017-07-11 17:26


origine


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


Réponses:


Cela fait ce que vous recherchez:

du -sh /*

Qu'est-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 mégaoctets et G pour gigaoctets (facultatif).
  • /* se développe simplement dans tous les répertoires (et fichiers) dans /.

    Remarque: les fichiers de points ne sont pas inclus; courir shopt -s dotglob pour les inclure aussi.

Le tri par taille est également utile:

du -sh /* | sort -h

Ici:

  • -h s'assure que sort interprète correctement les suffixes lisibles par l'homme.

367
2017-07-11 17:28



Si vous avez des répertoires de points dans le répertoire racine, vous pouvez utiliser shopt -s dotglob les inclure dans le compte. - Philipp
C'est très utile, car c'est simple et vous pouvez placer le chemin que vous voulez au lieu de /*, par exemple. ./ pour le répertoire courant ou ./* pour chaque élément du répertoire en cours. - psur
@psur ou vous pouvez utiliser ./*/ pour obtenir uniquement des sous-dossiers et pas tous les éléments - relascope
Version triée: du -sh /* | sort -h - Vu Anh
@ c1phr Si votre sort n'a pas -h, vous devez le laisser de du aussi, sinon le tri va mélanger kilo / méga / gigaoctets. du -s /* | sort -nr. - Thomas


J'ai souvent besoin de trouver les plus gros 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 rapportées en mégaoctets.


70
2017-07-29 12:07



Voici un moyen de le rendre plus lisible du -sh / some / path | sort -hr | tête -n 20 - Xedecimal
@Xedecima le problème avec l'utilisation de h est que le type ne sait pas comment gérer différentes tailles. Par exemple 268K est trié au-dessus de 255M, et les deux sont triés plus haut que 2.7G - chrisan
L'argument -h (humain lisible) sur la commande 'sort' devrait lire correctement ces valeurs. Tout comme le drapeau duh les exporte. Selon ce que vous exécutez, je devine. - Xedecimal
Fonctionne dans Ubuntu 16.04. Bon conseil. - SDsolar


J'aime utiliser Ncdu pour cela, vous pouvez utiliser le curseur pour naviguer et explorer la structure des répertoires.


14
2017-12-24 10:07





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

  1. Boucle très basique, mais pour moi c'était un bon début pour d'autres 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 il m'a fallu du temps pour comprendre la différence de * à ./* si dans un sous-répertoire:

    du -sh ./*
    

9
2017-11-22 16:53





Le suivant du l'invocation devrait fonctionner sur les systèmes BSD:

du -d 1 /

6
2017-07-11 17:29



ma du (Ubuntu 10.4) n'a pas de -d option. Sur quel système êtes-vous? - Thomas
Sur mon openSUSE, l'option -d n'est pas non plus :( - 2ndkauboy
OK, alors c'est seulement une option BSD (je suis sur OS X). - Philipp
La bonne combinaison d'options portables sur BSD / * NIX est du -sk /*. Je déteste le -k des trucs tellement beaucoup. Linux ' -h totalement des roches. - Dummy00001
dans d'autres systèmes, son --max-depth - Vishnu Kumar


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

Pour obtenir les plus gros é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 Mo dans mon exemple):

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

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

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

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h

3
2017-07-24 11:04



--threshold ^^^ cette option n'est pas disponible sur linux - podarok
@podarok Il est disponible sur OpenSUSE 13.2 Linux. Essayez de trouver une version plus récente de votre distribution ou compilez vous-même une version plus récente du paquet. - Aaron Digulla
Il ne fonctionne pas sur Ubuntu LTS (14.04). C'est le plus récent)) - podarok
@podarok Quelle version de GNU coreutils? Le mien est 8.24. - Aaron Digulla
La mise en cache pourrait avoir été un mauvais terme. Je pensais à quelque chose comme fait dans ce port superuser.com/a/597173/121352 où nous numérisons le contenu des disques une fois dans un mappage, puis nous continuons à utiliser les données de ce mappage plutôt que de frapper à nouveau le disque. - Hennes


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


1
2017-10-05 15:36





Vous pourriez aussi vouloir vérifier xdiskusage. Vous donnera les mêmes informations, mais vous montrerez graphiquement, et vous pourrez également les explorer (très utile). Il existe d'autres utilitaires similaires pour KDE et même Windows.


0
2017-07-12 19:42





Vous pourriez 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 canalisé à awk. awk commence le traitement des données. Le délimiteur standard est l'espace. La variable somme tot est initialisé à zéro; l'instruction suivante est exécutée pour chaque ligne / ligne émise par ls. Il ne fait qu’incrémenter tot avec la taille $5 représente la cinquième colonne (sortie par ls). À la fin, nous divisons par (1024 * 1024) pour résumer en mégaoctets.

Si vous convertissez cela en script ou en fonction (.bashrc), vous pouvez également l’utiliser pour obtenir la taille de certains sous-ensembles de répertoires, en fonction des types de fichiers.

Si vous voulez des informations à l'échelle du système, kdirstat peut être utile!


0
2017-12-20 09:56



Je suis d'accord que l'on peut développer cet exemple et faire des trucs comme obtenir la taille de "certains sous-ensembles de répertoires, en fonction des types de fichiers", etc. cela peut sembler un bon point de départ. Néanmoins, cette solution est défectueuse depuis le début. Je recommande à tous les utilisateurs qui souhaitent utiliser cette méthode de lire les réponses et les commentaires. cette question aussi bien que article lié là. Je ne dis pas que vous ne pouvez pas le faire du tout. Connaître les limites, c'est tout. - Kamil Maciorowski