1040 votes

Comment déterminer la taille totale d'un répertoire (dossier) à partir de la ligne de commande ?

Existe-t-il une commande simple pour afficher la taille totale agrégée (utilisation du disque) de tous les fichiers d'un répertoire (dossier) ?

Je les ai essayés, et ils ne font pas ce que je veux :

  • ls -l qui n'affiche que la taille des fichiers individuels d'un répertoire, ni la taille de l'ensemble des fichiers.
  • df -h qui affiche uniquement l'espace libre et l'espace utilisé sur mes disques.

16voto

vivekyad4v Points 424

Voici ce que j'utilise pour imprimer le total, le dossier et la taille du fichier :

$ du -sch /home/vivek/* | sort -rh

Détails

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

Sortie

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

5voto

palig Points 1861

Les réponses ont rendu évident que du est l'outil permettant de trouver la taille totale d'un répertoire. Cependant, il y a quelques facteurs à prendre en compte :

  • Occasionnellement, du peut être trompeuse car elle indique l'espace alloué par le système de fichiers, qui peut être différent de la somme des tailles des fichiers individuels. Typiquement, le système de fichiers allouera 4096 octets pour un fichier même si vous n'y avez stocké qu'un seul caractère !

  • Différences de rendement dues aux unités de puissance de 2 et de puissance de 10. Le site -h passer à du divise le nombre d'octets par 2^10 (1024), 2^20 (1048576) etc. pour donner une sortie lisible par l'homme. De nombreuses personnes pourraient être plus habituées à voir des puissances de 10 (par exemple 1K = 1000, 1M = 1000000) et être surprises par le résultat.

Pour trouver la somme totale des tailles de tous les fichiers d'un répertoire, en octets, faites :

find <dir> -ls | awk '{sum += $7} END {print sum}'

Exemple :

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169

3voto

Zombo Points 1663

Vous pouvez utiliser l'outil Dust :

PS C:\git> dust
   0B        templates                                                     0%
   0B      git-core                                                        0%
   0B    share                                                             0%
  76B    readme.md                                                         0%
 156K       less.exe                2%
 2.7M       git-remote-https.exe   42%
 3.6M       git.exe                56%
 6.5M     git-core                100%
 6.5M    libexec                   100%
 6.5M  .                           100%

Mon exemple est tiré de Windows, mais Linux et Apple sont également pris en charge :

https://github.com/bootandy/dust

3voto

WinEunuuchs2Unix Points 91128

Je suis conditionné à la ll qui est un alias de la commande ls -alF . Il manque juste le nombre de fichiers et leur taille en bas de l'écran. J'ai joué avec du y tree mais je n'ai pas pu obtenir les totaux dont j'avais besoin. J'ai donc créé lll pour faire ça pour moi.

Dans votre ~/.bashrc placer les éléments suivants :

lll () {
    ls -alF "$@"
    arr=($(ls -alF "$@" | awk '{TOTAL+=$5} END {print NR, TOTAL}'))
    printf " \33[1;31m ${arr[0]}\33[m line(s).  "
    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"
#    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"
}

Sauvegarder le fichier et l'utiliser comme ressource en utilisant . ~/.bashrc (ou vous pouvez redémarrer votre terminal).


Exemple de sortie

Ce qui est bien avec ll La sortie est ses couleurs. Ceci est maintenu avec lll mais perdue lors de l'utilisation de find ou du :

lll sample output.png


TL;DR

Une fonction bonus que vous pouvez ajouter à ~/.bashrc s'appelle BytesToHuman() . Il fait ce que la plupart des utilisateurs de consoles attendent, à savoir convertir les grands nombres en MiB, GiB, etc :

function BytesToHuman() {

    # https://unix.stackexchange.com/questions/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1/259254#259254

    read StdIn

    b=${StdIn:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Y,Z}iB)
    while ((b > 1024)); do
        d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))"
        b=$((b / 1024))
        let s++
    done
    echo "$b$d ${S[$s]}"

} # BytesToHuman ()

Retournez ensuite le commentaire entre deux lignes dans lll () pour ressembler à ceci :

#    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"
    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"

Maintenant, votre sortie ressemble à ceci :

lll sample output 2.png

Comme toujours, n'oubliez pas de re-sourcer avec . ~/.bashrc chaque fois que vous effectuez des modifications. (Ou redémarrer le terminal bien sûr)

PS - Deux semaines d'autoquarantaine m'ont finalement donné le temps de travailler sur cet objectif vieux de cinq ans.

1voto

du /foldername est la commande standard pour connaître la taille d'un dossier. Il est préférable de trouver les options en lisant la page de manuel :

man du

Vous devriez lire la page de manuel (disponible en ligne ) avant d'utiliser la commande.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X