Comment déterminer la taille totale d'un répertoire (dossier) à partir de la ligne de commande?

787

Existe-t-il une commande simple permettant d’afficher la taille totale agrégée (utilisation du disque) de tous les fichiers d’un répertoire (dossier)?

J'ai essayé ceux-ci, et ils ne font pas ce que je veux:

  • ls -l, qui n’affiche que la taille des fichiers individuels dans un répertoire, ni
  • df -h, qui n’affiche que l’espace libre et utilisé sur mes disques.
David Barry
la source
Rappel amical que cela n’a pratiquement aucun sens sur un système de fichiers CoW comme BTRFS.
val

Réponses:

1268

La commande du"résume l'utilisation du disque de chaque fichier, de manière récursive pour les répertoires", par exemple,

du -hs /path/to/directory
  • -hest d'obtenir les nombres "lisibles par l'homme", par exemple, get à la 140Mplace de 143260(taille en Ko)
  • -sest pour le résumé (sinon vous obtiendrez non seulement la taille du dossier mais aussi tout ce qui se trouve dans le dossier séparément)

Pendant que vous utilisez, -hvous pouvez trier les valeurs lisibles par l'homme à l'aide de

du -h | sort -h

Le -hdrapeau sur sortconsidérera les valeurs de taille "Human Readable".


Si vous souhaitez éviter de répertorier de manière récursive tous les fichiers et répertoires, vous pouvez fournir le --max-depthparamètre permettant de limiter le nombre d'éléments affichés. Le plus souvent,--max-depth=1

du -h --max-depth=1 /path/to/directory
Marcel Stimberg
la source
9
le respect de faire un effort supplémentaire. :)
myusuf3
93
J'utilise du -shou DOOSH comme moyen de s'en souvenir (NOTE: la commande est la même, mais l'organisation des drapeaux de ligne de commande à des fins de mémoire)
Marco Ceppi
3
Il existe une option utile appelée la --apparent-size. Il peut être utilisé pour trouver la taille réelle d'un fichier ou d'un répertoire (par opposition à son empreinte sur le disque), par exemple, un fichier texte avec seulement 4 caractères occupera environ 6 octets, mais sera toujours affiché comme prenant environ 4 Ko une sortie du -sh régulière. Toutefois, si vous passez l'option --apparent-size, le résultat sera 6. man du dit: - tailles apparentes pour l'impression au format apparent, plutôt que l'utilisation du disque; bien que la taille apparente soit généralement plus petite, elle peut l'être davantage en raison de trous dans les fichiers («clairsemés»), de fragmentation interne, de blocs indirects
Hopping Bunny le
4
Cela fonctionne aussi pour OS X! Merci, je cherchais vraiment un moyen de nettoyer les fichiers, à la fois sur ma machine locale et sur mon serveur, mais les méthodes automatisées ne semblaient pas fonctionner. Alors, j'ai couru du -hs *et suis allé dans le plus grand répertoire et j'ai découvert quels fichiers étaient si gros ... C'est une si bonne méthode, et le meilleur, c'est que vous n'avez rien à installer! Mérite vraiment mon vote positif
Dev
@BandaMuhammadAlHelal Je pense qu'il y a deux raisons: l'arrondi (arrondi duun peu particulier, ne pas afficher de décimales si la valeur a plus d'un chiffre dans l'unité choisie), et le préfixe classique avec préfixe 1024 vs 1000 . dua une option -B(ou --block-size) pour changer les unités dans lesquelles il affiche les valeurs, ou vous pouvez utiliser -bau lieu de -hpour obtenir la valeur "brute" en octets.
Marcel Stimberg
164

Récemment, j'ai trouvé un excellent outil interactif basé sur ncurses, qui vous donne rapidement un aperçu de la taille des répertoires. Recherché ce genre d'outil pendant des années.

  • explorer rapidement la hiérarchie des fichiers
  • vous pouvez par exemple supprimer d'énormes fichiers temporaires de l'intérieur de l'outil
  • extrêmement vite

Pensez-y comme un baobab pour la ligne de commande:

apt-get install ncdu
geekQ
la source
11
C'est absolument fantastique! Comme DaisyDisk, pour OSX
subZero
3
ncduest génial! Après l'avoir installé, faites ceci ncdu /. Vous trouverez très rapidement les fichiers les plus volumineux du système. Appuyez également sur à l' hintérieur de l'interface de la console de ncdu. Il a des raccourcis très utiles
vlad-ardelean
C’EST EXACTEMENT ce dont j’avais besoin: si simple, si efficace. Amour pur.
user3790897
52

Cela trouve la taille de manière récursive et le met à côté de chaque nom de dossier, avec la taille totale en bas, le tout au format humain.

du -hsc *
Brad
la source
17

Prendre plaisir!

du foldername

Plus d'informations sur cette commande ici

myusuf3
la source
10

tree est une autre commande utile pour ce travail:

Installez-le simplement via sudo apt-get install treeet tapez ce qui suit:

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

De l' homme arbre :

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)
αғsнιη
la source
9

Voici ce que j'utilise pour imprimer la taille totale, du dossier et du fichier:

$ du -sch /home/vivek/* | sort -rh

Détails

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

Sortie

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files
vivekyad4v
la source
4

Les réponses ont clairement montré qu’il s’agissait de dul’outil permettant de déterminer la taille totale d’un répertoire. Cependant, il y a deux facteurs à prendre en compte:

  • Parfois, la dusortie peut être trompeuse car elle indique l'espace alloué par le système de fichiers, qui peut être différent de la somme des tailles des fichiers individuels. Généralement, le système de fichiers allouera 4096 octets à un fichier même si vous n'y avez stocké qu'un seul caractère!

  • Différences de sortie dues à une puissance de 2 et à une puissance de 10 unités. Le -hcommutateur dudivise le nombre d'octets par 2 ^ 10 (1024), 2 ^ 20 (1048576), etc. pour obtenir une sortie lisible par l'homme. Beaucoup de gens pourraient être plus habitués à voir des puissances de 10 (par exemple 1K = 1000, 1M = 1000000) et être surpris par le résultat.

Pour trouver la somme totale des tailles de tous les fichiers d'un répertoire, en octets, procédez comme suit:

find <dir> -ls | awk '{sum += $7} END {print sum}'

Exemple:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169
pdp
la source
Find-ls-awk renverra une valeur incorrecte pour les gros dossiers n ° 1 . Pour les nouveaux awk, vous pouvez ajouter --bignumou -M; si ce n'est pas une option, utilisez find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc # 2 .
Goozez
Si les puissances de 2 utilisées posent problème, il existe l' --sioption: "comme -h, mais utilisez des puissances de 1000 et non de 1024"
muru
1

Pour seulement la taille du répertoire dans un format lisible, utilisez ce qui suit:

du -hs directoryname

Ce n'est probablement pas dans la bonne section, mais à partir de la ligne de commande, vous pouvez essayer:

ls -sh filename

La -staille est, et le -hest lisible par l'homme.

Utilisez -lpour afficher sur la lsliste, comme ci-dessous:

ls -shl
Shiv Singh
la source
0

du /foldernameest la commande standard pour connaître la taille d'un dossier. Il est recommandé de rechercher les options en lisant la page de manuel:

man du

Vous devriez lire la page de manuel (disponible en ligne ) avant d’utiliser la commande.

Balaswamy Vaddeman
la source
0

Voici un script POSIX qui fonctionnera avec:

  • Un fichier
  • Des dossiers
  • Un annuaire
  • Répertoires
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

La source

Steven Penny
la source
0

Si votre répertoire souhaité contient plusieurs sous-répertoires, utilisez ce qui suit:

$ cd ~/your/target/directory
$ du -csh 

-c, --total produit un total général
-s, --summarize affiche uniquement un total pour chaque argument
-h, - des tailles d'impression lisibles par l'homme dans un format lisible par l'homme (par exemple, 1K 234M 2G)

ce qui produirait alors un total global de l'utilisation de la mémoire par tous les fichiers / dossiers du répertoire en cours.

kmario23
la source
-1

Le meilleur que je pense est le suivant:

du -h directory_name | tail -n1

Cela ne vous montrera que la taille du répertoire qui vous intéresse et n'imprimera pas la taille des répertoires et des fichiers qu'il contient.

Je devrais ajouter que si la taille du dossier est grande, cela prend plus de temps. Vous devez être patient pour que cette commande fonctionne. Comme toute autre commande unix, vous pouvez connaître la durée totale de ce processus en utilisant timeavant cette commande:

time du -h directory_name | tail -n1
Paisible
la source
6
dua une option pour cela:-s
muru