81 votes

Comment obtenir la taille d'un répertoire Linux ou Mac OS X à partir de la ligne de commande ?

Quelle commande dois-je utiliser pour connaître la taille de tous les fichiers (de manière récursive) dans un répertoire Linux ou Mac OS X ?

93voto

wch Points 1046

La version BSD de du utilisé dans OS X rapporte la taille avec des blocs de 512 octets -- les tailles sont essentiellement arrondies à la valeur de 512 octets suivante. Cela vous indique l'espace sur le disque, qui est plus grand que la quantité de données. Si vous avez beaucoup de petits fichiers, la différence peut être importante.

Voici un exemple.

C'est la valeur avec des du . C'est en blocs de 512 octets :

$ du -s
248   .

Le site -h permet d'obtenir un nombre plus lisible, en kilo-octets. Comme prévu, c'est la moitié du nombre de blocs de 512 octets :

$ du -hs
124K  .

Enfin, vous pouvez utiliser find y awk pour vous donner la somme des octets réels dans les fichiers. C'est un peu lent, mais ça marche :

$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527

Cette valeur correspond exactement au nombre indiqué par la fenêtre Get Info du Finder. (Il n'y a pas de bifurcations ou de xattrs bizarres dans cet ensemble de fichiers.) C'est significativement plus petit que la valeur rapportée par du .

Voici comment cela fonctionne : il obtient une liste de tous les fichiers, et les transmet à ls -l ; alors awk est utilisé pour compter les octets. Le site -type f est là pour que seuls les fichiers (et non pas les répertoires) soient envoyés à ls . Sans ce drapeau, il enverra également les noms de répertoire à ls et chaque fichier sera listé deux fois : une fois en tant que fichier individuel, et une fois en tant qu'élément du répertoire.

La version GNU de du peut donner des valeurs en octets réels au lieu de blocs. Il est regrettable que la version BSD de du n'est pas aussi flexible.

77voto

Daryl Spitzer Points 8205

Afficher la taille d'un seul fichier

du -h path_to_a_file

Affiche la taille du contenu d'un répertoire, de chaque sous-répertoire et de chaque fichier individuel :

du -h path_to_a_directory

Affiche la taille du contenu d'un répertoire :

du -sh path_to_a_directory

11voto

Acid Points 111

du - indique à la utilisation du disque pas le taille du fichier .

find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=$1} END {print b}'

le code terminal ci-dessus (j'ai osx 10.6) offre pour moi le meilleur résultat et est beaucoup plus rapide que "find ... -exec".

un repère rapide

time find . -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}'
4744010970

real    0m0.086s
user    0m0.029s
sys 0m0.073s

time find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
4744010970

real    0m18.515s
user    0m2.929s
sys 0m9.339s

10voto

kenorb Points 22006

Vous pouvez utiliser du -ah . qui affiche les tailles de tous les fichiers et répertoires de manière récursive.

Cela peut être combiné avec sort Ainsi, vous verrez les 20 plus grands répertoires du dossier actuel :

du -ah . | sort -rh | head -20

Note : Option -h para sort n'est pas disponible sur OSX/BSD, vous devez donc installer sort de coreutils (par exemple, via brew ) et appliquer le chemin du bac à PATH par exemple

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

Sinon, utilisez :

du -a . | sort -rn | head -20

2voto

malte Points 21

J'ai combiné toutes vos approbations et je les ai combinées avec une sortie lisible par l'homme ; le résultat est le suivant :

#!/bin/sh
find $1 -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}' | awk '{ sum=$1 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'

Lien vers l'essentiel : https://gist.github.com/mlegenhausen/9365461

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