web-dev-qa-db-fra.com

Comment trouver récursivement la quantité stockée dans le répertoire?

Je sais que vous pouvez voir la taille en octets d'un fichier lorsque vous faites une longue liste avec ll ou ls -l. Mais je veux savoir combien d'espace de stockage se trouve dans un répertoire, y compris les fichiers dans ce répertoire et les sous-répertoires qu'il contient, etc. Je ne veux pas le nombre de fichiers, mais plutôt la quantité de stockage que ces fichiers occupent.

Je veux donc savoir combien d'espace de stockage est dans un certain répertoire récursivement? Je suppose, s'il y a une commande, que ce serait en octets.

149
Rob Avery IV

Essayez de faire ceci:

du -s dir

ou

du -sh dir

besoins -h prise en charge, dépend de votre système d'exploitation.

Voir

man du
161
Gilles Quenot

Vous faites juste:

du -sh /path/to/directory

-s est pour résumé et -h pour lisible par l'homme ( non standard option).

Attention cependant, contrairement à ls, ce sera pas = vous montrer taille du fichier mais utilisation du disque (c'est-à-dire un multiple de la taille de bloc du système de fichiers), mais le fichier peut être plus petit, voire plus grand, vous pouvez donc utiliser le --apparent-size option:

du -sh --apparent-size /path/to/directory

Il s'agit de la taille qui serait transférée sur le réseau si vous le deviez.

En effet, le fichier peut avoir des "trous" (Shell vide), peut être plus petit que la taille de bloc du système de fichiers, peut être compressé au niveau du système de fichiers, etc. La page de manuel explique ceci.

Comme Nicklassouligne , vous pouvez également utiliser l'analyseur d'utilisation du disque ncdu. Lancé à partir d'un répertoire, il vous montrera quels dossiers et fichiers utilisent l'espace disque en les classant du plus grand au plus petit.

Vous pouvez également voir cette question .

30
Totor

Notez que si vous voulez connaître la taille de tous les sous-dossiers dans un répertoire, vous pouvez également utiliser le -dou --max-depth option de du (qui prend un argument: la limite récursive)

Par exemple :

du -h /path/to/directory -d 1

Vous montrera quelque chose comme

4.0K /path/to/directory/folder1
16M  /path/to/directory/folder2
2.4G /path/to/directory/folder3
68M  /path/to/directory/folder4
8G   /path/to/directory/folder5

PS: Saisie de 0 car la limite récursive est équivalente à -s option. Ces 2 commandes vous donneront le même résultat (votre répertoire donné de taille récursive lisible par l'homme):

du -h /path/to/directory -d 0
du -sh /path/to/directory
24
Flo Schild

Une alternative à la commande du déjà mentionnée serait ncdu qui est un analyseur d'utilisation du disque Nice pour une utilisation dans le terminal. Vous devrez peut-être l'installer d'abord, mais il est disponible dans la plupart des référentiels de packages.

Modifier: Pour le format de sortie, voir ces captures d'écran http://dev.yorhel.nl/ncdu/scr

16
Niklas

Cela vous donnera une liste des tailles du répertoire actuel, y compris les dossiers (récursifs) et les fichiers.

$ du -hs *
7.5M    Applications
9.7M    Desktop
 85M    Documents
 16K    Downloads
 12G    Google Drive
 52G    Library
342M    Movies
8.3M    Music
780M    Pictures
8.5G    Projects
8.0K    Public
 16K    client1.txt
13
Simon Liu

Sous Unix, un répertoire contient uniquement des noms et des références aux objets du système de fichiers (inodes, qui peuvent faire référence à des répertoires, des fichiers ou d'autres choses exotiques). Un fichier peut apparaître sous plusieurs noms dans le même répertoire ou être répertorié dans plusieurs répertoires. Donc, "l'espace utilisé par le répertoire et les fichiers à l'intérieur" n'a vraiment aucun sens, car les fichiers ne sont pas "à l'intérieur".

Cela dit, la commande du(1) répertorie l'espace utilisé par un répertoire et tout ce qui est accessible à travers lui, du -s donne un résumé, avec -h certaines implémentations comme GNU du donnent une sortie "lisible par l'homme" (c'est-à-dire kilo-octet, mégaoctet).

4
vonbrand

Vous pouvez utiliser "file-size.sh" à partir de l'awk bibliothèque Velour :

ls -ARgo "$@" | awk '{q += $3} END {print q}'
2
Steven Penny

Pour moi, cela a fonctionné à l'envers dans le cas de la profondeur et du chemin sur un OS X El Capitán

du -h -d 1 /path/to/directory
1
GZepeda