Comment puis-je obtenir la taille d'un répertoire sur la ligne de commande?

1065

J'ai essayé d'obtenir la taille d'un répertoire (contenant des répertoires et des sous-répertoires) en utilisant la lscommande avec option l. Cela semble fonctionner pour les fichiers ( ls -l file name), mais si j'essaie d'obtenir la taille d'un répertoire (par exemple ls -l /home), je n'ai que 4096 octets, bien que dans l'ensemble, il soit beaucoup plus grand.

Abdul Al Hazred
la source
18
1) Strictement parlant, vous ne pouvez pas. Linux a des répertoires, pas des dossiers. 2) Il existe une différence entre la taille d'un répertoire (un fichier spécial contenant des inodes qui pointent vers d'autres fichiers) et la taille du contenu de ce répertoire. Comme d'autres l'ont souligné, la commande du fournit cette dernière, c'est ce que vous semblez vouloir.
jamesqf
11
comme vous semblez être nouveau, je soulignerai simplement l’ -hoption utile que vous pouvez ajouter à l’ -loption (par exemple ls -lh) pour obtenir la taille des fichiers à imprimer en notation conviviale comme 1.1M au lieu de 1130301. Le "h "dans la du -hscommande que @sam a donnée comme réponse à votre question sur les répertoires signifie également" lisible par l'homme ", ainsi que dans df -hla liste indiquant la quantité lisible par l'homme d'espace utilisé et disponible sur le disque.
msouth

Réponses:

1490

du -sh file_path

Explication

  • du( d isc u sage) commande estime l'utilisation de l'espace chemin_fichier
  • Les options -shsont (à partir de man du):

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    Pour vérifier plusieurs répertoires et voir le total, utilisez du -sch:

      -c, --total
             produce a grand total
    
sam
la source
44
... sauf si vous avez des
liens durs
15
C’est le genre de réponse que j’aime <3. C’est un résumé et une sorte d’introduction à la commande du. Vous donnez également le moyen de rechercher plus de détails man du...
Astuce pour les décideurs de type Unix: La prochaine fois, créez simplement la commande "diskusage", ou peut-être même "l'utilisation du disque" ... puis le raccourci ...;)
jave.web
Cela fonctionne très bien, par find exemple, pour compter la quantité d’espace dans des sous-répertoires spécifiques du chemin actuel: $ find . -type d -name "node_modules" -prune -exec du -sh {} \;
Alex Glukhovtsev
321

Il suffit d'utiliser la ducommande:

du -sh -- *

vous donnera l'utilisation cumulée sur le disque de tous les répertoires, fichiers, etc. non cachés du répertoire en cours dans un format lisible par l'homme.

Vous pouvez utiliser la dfcommande pour connaître l'espace disponible dans le système de fichiers contenant le répertoire:

df -h .
Pacifiste
la source
4
du -sh *commence à générer des erreurs "inconnu" si l'un des fichiers de ce répertoire commence par un tiret. du -sh -- *
Plus
1
du -sh *ne montre pas les utilisations de la mémoire des dossiers cachés
Prashant Prabhakar Singh
4
du -sh -- * .*inclure les fichiers de points. Ceci est utile pour inclure un .gitrépertoire éventuellement volumineux , par exemple. Alternativement, en zsh, vous pouvez setopt globdotsglober les fichiers de points par défaut.
cbarrick
1
Qu'est-ce que le --fait? Je sais que cela s'applique au shell intégré pour mettre fin aux arguments d'option, mais ce dun'est pas intégré, et je ne vois pas cet usage documenté pour du: linux.die.net/man/1/du
flow2k
Parfois, vous voudrez ajouter -b( --apparent-size)
elig
196

duest votre ami. Si vous voulez juste connaître la taille totale d'un répertoire, sautez-y et lancez:

du -hs

Si vous souhaitez également savoir quels sous-dossiers occupent combien d’espace disque?! Vous pouvez étendre cette commande à:

du -h --max-depth=1 | sort -hr

qui vous donnera la taille de tous les sous-dossiers (niveau 1). La sortie sera triée (le plus grand dossier en haut).

Chrispie
la source
Il semble que sur certaines versions (peut-être plus anciennes?) De linux, sort n'a pas de commutateur h et, par conséquent, la meilleure commande que je pourrais trouver est la suivante: du -c --max-depth = 1 | sort -rn
richhallstoke le
@richhallstoke si vous utilisez ncdules fichiers sont triés par défaut en taille décroissante.
Armfoot
3
+1 pour le "| sort -hr"
afranques
67

dupeut être compliqué à utiliser car vous devez apparemment passer 100 arguments pour obtenir une sortie décente. Et déterminer la taille des dossiers cachés est encore plus difficile.

Rendre la vie facile et utiliserncdu .

ncdu

Vous obtenez des résumés par dossier qui sont facilement consultables.

Teque5
la source
9
Cela devrait être la bonne réponse, du moins pour ceux qui peuvent installer un logiciel sur le système. Malheureusement, je ne pense pas que la plupart des gens vont faire défiler l'écran assez loin pour voir cela.
DavidR
@ RickyNotaro-Garcia Nope, cela ignore les objets cachés et se bloque sur les grands répertoires. Il se peut qu’il existe une solution acceptable avec une douzaine de tuyaux, mais pourquoi perdre votre vie.
Teque5
@ RickyNotaro-Garcia Lire tout mon commentaire: votre tentative ignore les objets cachés et se bloque sur de grands répertoires.
Teque5
2
ncduest génial, je cherche toujours cette commande quand je l’oublie. C'est rapide, facile à naviguer et aide à trouver facilement de gros dossiers. Pour votre information, il est également disponible sur macOS et probablement sur toutes les machines linux.
Lukas
..et vous pouvez supprimer des dossiers directement ncduen appuyant sur la dtouche
ccpizza
32

D'autres ont déjà mentionné du, mais je voudrais aussi mentionner Ncdu - qui est une version de ncurses duet fournit de l'interactivité: vous pouvez explorer directement la hiérarchie des répertoires et voir la taille des sous-répertoires.

Tblue
la source
26

La ducommande affiche l'utilisation du disque sur le disque.

L' -hoption affiche les résultats sous une forme lisible par l'homme (par exemple, 4k, 5M, 3G).

du -h (file name)
jackotonye
la source
22

Tous les exemples ci-dessus vous indiqueront la taille des données sur le disque (c'est-à-dire la quantité d'espace disque utilisée par un fichier particulier, qui est généralement supérieure à la taille réelle du fichier). Dans certaines situations, ils ne vous donneront pas de rapport précis si les données ne sont pas réellement stockées sur ce disque particulier et que seules les références inode existent.

Dans votre exemple, vous avez utilisé ls -l sur un seul fichier, qui aura retourné la taille réelle du fichier, PAS sa taille sur le disque.

Si vous voulez connaître la taille réelle des fichiers, ajoutez l’option -b à du.

du -csbh .
Andy Foster
la source
Oui. J'utilise sdfs qui compresse et dédouble les fichiers, je ne peux donc pas comprendre pourquoi il signale un nombre aussi bas. La taille réelle des fichiers avec ls peut être trouvée en utilisant: du -b
Ryan Shillington
15

Personnellement, je pense que c'est mieux, si vous ne voulez pas utiliser ncdu

# du -sh ./*
ConnerMan
la source
14
df -h .; du -sh -- * | sort -hr

Cela montre combien d’espace disque il vous reste sur le lecteur en cours, puis combien de temps chaque fichier / répertoire occupe. par exemple,

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json
mpen
la source
Pour votre information, il semble rapporter la taille sur le disque. c'est-à-dire qu'il sera probablement rembourré au 4Ko le plus proche.
mardi
9

trouve tous les fichiers du répertoire courant de manière récursive et résume leur taille:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'
Leon Chang
la source
Je voudrais utiliser -not -type dpour additionner non seulement la taille des fichiers ordinaires ( -type f), mais également celle des liens symboliques, etc.
anton_rh
C’est formidable, car vous n’obtenez pas la surcharge nécessaire pour stocker les fichiers, mais seulement la taille des fichiers eux-mêmes.
bballdave025
9

Voici une fonction pour vos .bash_aliases

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

exemple de sortie:

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

pour les sous-répertoires:

$ dusort .
$ dusort /var/log/
feldversuch
la source
7

Une autre variante:

du -h --max-dep=1
0x8BADF00D
la source
6

Notez que l’ duimpression de l’espace occupé par un répertoire sur le support est généralement supérieure à la taille totale de tous les fichiers du répertoire, car elle duprend en compte la taille de toutes les informations auxiliaires stockées sur le support pour organiser le répertoire en conformité avec le format du système de fichiers.

Si le système de fichiers est compressible, le dunombre de fichiers générés peut être encore inférieur à la taille totale de tous les fichiers, car ceux-ci peuvent être compressés en interne par le système de fichiers et occupent donc moins d'espace sur le support que les informations non compressées qu'ils contiennent. Idem s'il y a des fichiers fragmentés.

s'il y a des liens durs dans le répertoire, duvous pouvez imprimer une valeur plus petite car plusieurs fichiers différents du répertoire font référence aux mêmes données sur le support.

Pour obtenir la taille totale simple de tous les fichiers du répertoire, vous pouvez utiliser l'expression de shell à une ligne suivante (en supposant un système GNU):

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

ou même plus court:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

Il additionne simplement les tailles de tous les fichiers non-répertoires du répertoire (et de ses sous-répertoires de manière récursive) un par un. Notez que pour les liens symboliques, il indique la taille du lien symbolique (pas du fichier vers lequel le lien symbolique pointe).

anton_rh
la source
5

Vous pouvez utiliser

du -sh directory/

et

du -sh filename

connaître l'espace occupé par le dossier ou le fichier.

df -h

montrera l'utilisation du disque dans un format lisible par l'homme -h le fait.

Il existe également un programme basé sur une interface graphique appelé Disk Usage Analyzer.

arupgsh
la source
5

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