Question Comment puis-je obtenir la taille d'un répertoire Linux ou Mac OS X à partir de la ligne de commande? [dupliquer]


Cette question a déjà une réponse ici:

Quelle commande dois-je utiliser pour trouver la taille de tous les fichiers (récursivement) dans un répertoire Linux ou Mac OS X?


67
2017-08-13 20:00


origine


vous pouvez utiliser -k option pour utiliser la taille de bloc de 1 Ko-octet - Zoker
Je veux juste recommander ce logiciel gratuit appelé Disk Inventory X. téléchargez-le ici derlien.com il est simple à utiliser pour mac osx - Adam Delarosa


Réponses:


La version BSD de du utilisé dans la taille des rapports OS X avec des blocs de 512 octets - les tailles sont essentiellement arrondies à la valeur suivante de 512 octets. Cela vous indique l'espace sur le disque, qui est supérieur à 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 régulière du. C'est dans des blocs de 512 octets:

$ du -s
248   .

le -h flag donne un nombre plus lisible, en kilo-octets. Comme prévu, il y a deux fois moins 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 Obtenir des informations du Finder. (Il n'y a pas de fourches ou de xattrs étranges dans cet ensemble de fichiers.) Il est nettement 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; puis awk est utilisé pour compter les octets. le -type f flag est là pour que seuls les fichiers (et non les répertoires) soient envoyés à ls. Sans ce drapeau, il enverra également des noms de répertoires à ls, et chaque fichier sera répertorié 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 n'est pas aussi flexible.


73
2018-03-18 05:54



Bonne explication Intéressant quand on utilise du à partir de GNU coreutils avec le -b option j'obtiens un résultat différent de celui de votre find tuyau. Pour un répertoire de 36 Go, j'obtiens une différence de 82 Ko. - Stefan Schmidt
existe-t-il un moyen d'imprimer cela dans un format plus lisible? - anon58192932


Montrer la taille d'un fichier unique

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


73
2017-08-13 20:01



du -sch si vous voulez quelque chose de plus facilement lisible. - Joey
@Johannes, je suppose que vous devriez poster ce commentaire comme une réponse, de sorte qu'il puisse être accepté? - Arjan
Je trouve l'option -c redondante (au moins sous Mac OS X) et du -sh supprime les sous-totaux. - Daryl Spitzer
Aha, je ne savais pas qu'on pouvait accepter sa propre réponse. Maintenant au moins les gens savent que la question est résolue. - Arjan
J'accepterai volontiers une nouvelle réponse qui est une amélioration sur la mienne. - Daryl Spitzer


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

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

ci-dessus le code terminal (im on osx 10.6) offre pour moi le meilleur résultat et est 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

9
2017-11-11 22:31



Si vous voulez faire la même chose sur Ubuntu: find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}' - Rodrigo Polo
existe-t-il un moyen d’obtenir ce résultat dans un format lisible par l’homme? - anon58192932


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, vous verrez donc les 20 plus grands répertoires du dossier actuel:

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

Note: Option -h pour sort n'est pas disponible sur OSX / BSD, vous devez donc l'installer sort de coreutils (par exemple via brew) et appliquer le chemin de bin à 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

5
2018-03-05 14:03



La première commande ne fonctionne pas sur mon macOS 10.12.1 #du -ah. | sort -rh | head -20 sort: option invalide - h Essayez `sort --help 'pour plus d'informations. - nucleartux
@nucleartux Vérifiez la note sous la commande. Cela fonctionne dans le tri GNU que vous pouvez installer sur macOS via: brew install coreutils, sinon utilisez la commande de tri BSD à la fin sans -h. - kenorb


J'ai combiné tous vos appuis et l'ai combiné avec une sortie 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 


2
2018-03-05 11:30