2009-08-13 20:00:15 +0000 2009-08-13 20:00:15 +0000
76
76

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 trouver la taille de tous les fichiers (récursivement) dans un répertoire Linux ou Mac OS X ?

Réponses (5)

83
83
83
2012-03-18 05:54:47 +0000

La version BSD de du utilisée dans OS X rapporte la taille avec des blocs de 512 octets – les tailles sont essentiellement arrondies à la valeur de 512 octets supérieure. 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 le du normal. C'est en blocs de 512 octets :

$ du -s
248 .

Le drapeau -h donne 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 et 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 fourchettes ou de xattrs bizarres dans cet ensemble de fichiers.) Elle est nettement inférieure à la valeur signalée par du.

Voici comment cela fonctionne : il obtient une liste de tous les fichiers, et les passe à ls -l ; puis awk est utilisé pour compter les octets. Le drapeau -type f est là pour que seuls les fichiers (et non les répertoires) soient envoyés à ls. Sans ce drapeau, il enverra également les noms de répertoires à ls, et chaque fichier sera listé deux fois : une fois en tant que fichier individuel, et une fois en tant qu'élément dans le 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 ne soit pas aussi flexible.

75
75
75
2009-08-13 20:01:52 +0000

Afficher la taille d'un seul fichier

du -h path_to_a_file

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

du -h path_to_a_directory

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

du -sh path_to_a_directory

9
9
9
2013-11-11 22:31:48 +0000

du - indique l'utilisation du disque et non la taille du fichier.

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

le code terminal ci-dessus (im sur osx 10.6) m'offre le meilleur résultat et est bien 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
6
6
6
2015-03-05 14:03:07 +0000

Vous pouvez utiliser du -ah . qui affiche la taille de tous les fichiers et répertoires de façon récursive.

qui peut être combiné avec sort, ce qui vous permet de voir les 20 plus gros répertoires du dossier en cours :

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

Note : L'option -h pour sort n'est pas disponible sur OSX/BSD, vous devez donc installer sort à partir 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
2
2
2
2014-03-05 11:30:06 +0000

J'ai combiné toutes vos approbations et j'ai combiné le tout avec un résultat lisible par l'homme : le résultat est :

#!/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

Questions connexes

6
10
12
7
3