web-dev-qa-db-fra.com

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

J'ai essayé d'obtenir la taille d'un répertoire (contenant des répertoires et sous-répertoires) en utilisant la commande ls avec l'option l. Il 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'obtiens que 4096 octets, bien qu'en tout il soit beaucoup plus gros.

1142
Abdul Al Hazred

du -sh file_path

Explication

  • du (d isc sage) estime la consommation de l'espace file_path
  • Les options -sh sont issus 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
    
1585
sam

Utilisez simplement la commande du:

du -sh -- *

vous donnera l'utilisation cumulative du disque de tous les répertoires, fichiers, etc. non cachés dans le répertoire actuel au format lisible par l'homme.

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

df -h .
347
Pacifist

du est votre ami. Si vous voulez simplement connaître la taille totale d'un répertoire, sautez-y et exécutez:

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).

212
Chrispie

du peut ê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.

Simplifiez-vous la vie et utilisez ncdu.

ncdu

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

77
Teque5

D'autres ont mentionné du, mais je voudrais également mentionner Ncd - qui est une version ncurses de du et fournit l'interactivité: vous pouvez explorer directement la hiérarchie des répertoires et voyez la taille des sous-répertoires.

35
Tblue

La commande du montre l'utilisation du disque sur le fichier.

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

du -h (file name)
28
jackotonye

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

Dans votre exemple, vous avez utilisé ls -l sur un seul fichier, qui aura renvoyé 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 .
24
Andy Foster

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

# du -sh ./*
17
ConnerMan
df -h .; du -sh -- * | sort -hr

Cela montre combien d'espace disque il vous reste sur le lecteur actuel et vous indique ensuite combien chaque fichier/répertoire prend. 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
16
mpen

I tilisez cette commande en tant que root :

Sudo ls -1d */ | Sudo xargs -I{} du {} -sh && Sudo du -sh
10
Eduard Florinescu

rechercher récursivement tous les fichiers du répertoire courant et résumer leur taille:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'
10
Leon Chang

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/
10
feldversuch

Encore une variante:

du -h --max-dep=1
9
0x8BADF00D

Voici un script POSIX qui fonctionnera avec:

  • Un fichier
  • Des dossiers
  • Un annuaire
  • Répertoires
ls -A -R -g -o "$@" | awk '{n1 += $3} END {print n1}'
7
Steven Penny

Notez que du affiche l'espace occupé par un répertoire sur le support, qui est généralement plus grand que la taille totale de tous les fichiers du répertoire, car du prend en compte la taille de toutes les informations auxiliaires qui est stocké sur le support pour organiser le répertoire conformément au format du système de fichiers.

Si le système de fichiers est compressible, du peut générer un nombre encore plus petit que la taille totale de tous les fichiers, car les fichiers peuvent être compressés en interne par le système de fichiers et donc prendre moins d'espace sur le support que les informations non compressées ils contiennent. Idem s'il y a des fichiers épars.

s'il y a des liens durs dans le répertoire, alors du peut également imprimer une valeur plus petite car plusieurs fichiers différents dans le répertoire renvoient les mêmes données sur le support.

Pour obtenir la taille totale simple de tous les fichiers du répertoire, l'expression Shell d'une ligne suivante peut être utilisée (en supposant un système GNU):

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

ou encore plus court:

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

Il additionne simplement la taille de tous les fichiers non-répertoire dans le répertoire (et ses sous-répertoires récursivement) 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).

6
anton_rh

Vous pouvez utiliser

du -sh directory/

et

du -sh filename

pour 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 fait cela.

Il existe également un programme basé sur gui appelé Disk Usage Analyzer.

6
arupgsh