web-dev-qa-db-fra.com

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. Lorsque j'utilise ls -la, je ne reçois pas vraiment la taille récapitulative 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, je reçois 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 dossier ROOT du système de fichiers. Y a-t-il un commandement pour y parvenir?

286
2ndkauboy

Cela fait ce que vous cherchez:

du -sh /*

Qu'est-ce que cela signifie:

  • -s pour ne donner que le total pour chaque argument de ligne de commande.
  • -h pour les suffixes lisibles par l'homme tels que M pour les mégaoctets et G pour les gigaoctets (facultatif).
  • /* s'étend simplement à tous les répertoires (et fichiers) dans /.

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

Le tri par taille est également utile:

du -sh /* | sort -h

Ici:

  • -h garantit que sort interprète correctement les suffixes lisibles par l'homme.
407
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 indiquées en mégaoctets.

74
Janne Pikkarainen

J'aime utiliser Ncdu pour cela, vous pouvez utiliser le curseur pour naviguer dans la structure de répertoires, cela fonctionne vraiment bien.

18
BuddhaLincoln

Les réponses existantes sont très utiles, peut-être que certains débutants (comme moi) le trouveront également 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 un certain temps pour comprendre la différence de * à ./* si dans un sous-répertoire:

    du -sh ./*
    
10
Martin

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

du -d 1 /
7
Philipp

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

Pour obtenir les éléments les plus volumineux (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 commençant par .).

Si vous ne voulez que les dossiers, vous devez utiliser find, mais cela peut être très lent car du devra analyser plusieurs dossiers à plusieurs reprises:

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

Sachez que vous ne pouvez pas comparer les répertoires avec du sur différents systèmes/machines sans vous en assurer, les deux partagent la même taille de bloc du système de fichiers. Cela pourrait compter si vous synchronisez certains fichiers d'une machine Linux sur un NAS et que vous souhaitez comparer le répertoire synchronisé vous-même. Vous pourriez obtenir des résultats différents avec du en raison de différentes tailles de bloc ....

1
Jimmy Koerting

Vous pouvez utiliser ls conjointement 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 somme tot est initialisée à zéro; L'instruction suivante est exécutée pour chaque ligne/ligne générée par ls. Il incrémente simplement tot avec la taille. $5 représente la cinquième colonne (sortie par ls). À la fin, nous divisons par (1024 * 1024) pour totaliser en mégaoctets.

Si vous voulez convertir cela en un script ou une 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 souhaitez des informations sur l’ensemble du système, kdirstat peut vous être utile!

0
J.M. Stoorvogel

Vous pouvez également vouloir vérifier xdiskusage . Vous donnera les mêmes informations, mais montrées graphiquement, plus vous permet d’avancer dans le détail (très utile). Il existe d'autres utilitaires similaires pour KDE et même Windows.

0
sleske