Comment puis-je 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)?

J'ai essayé ceux-ci, et ils ne font pas ce que je veux:

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

Commande du "résume l'utilisation du disque de chaque FICHIER, récursivement pour les répertoires", par ex.,

du -hs /path/to/directory
  • -h est d'obtenir les nombres "lisibles par l'homme", par exemple get 140M au lieu de 143260 (taille en Ko)
  • -s est pour le résumé (sinon vous obtiendrez non seulement la taille du dossier mais aussi pour tout dans le dossier séparément)

Comme vous utilisez -h vous pouvez trier les valeurs lisibles par l'homme en utilisant

du -h | sort -h

Le -h drapeau sur sort tiendra compte des valeurs de taille "lisibles par l'homme".


Si vous voulez éviter de lister récursivement tous les fichiers et répertoires, vous pouvez fournir le --max-depth paramètre pour limiter le nombre d'éléments affichés. Le plus souvent, --max-depth=1

du -h --max-depth=1 /path/to/directory

Récemment, j'ai trouvé un excellent outil interactif basé sur ncurses, qui vous donne rapidement un aperçu de la taille des répertoires. J'ai cherché ce genre d'outil pendant des années.

  • exploration rapide de la hiérarchie des fichiers
  • vous pouvez supprimer par exemple d'énormes fichiers temporaires à l'intérieur de l'outil
  • extrêmement rapide

Pensez-y comme Baobab pour la ligne de commande:

apt-get install ncdu

Cela trouve la taille de manière récursive et la place à côté de chaque nom de dossier, ainsi que la taille totale en bas, le tout au format humain

du -hsc *

Amusez-vous bien!

du foldername

Plus d'informations sur cette commande ici

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

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

Détail

 ------------------------------------------------------------   -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/lib992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

tree est une autre commande utile pour ce travail:

Il suffit de l'installer via sudo apt-get install tree et tapez ce qui suit:

tree --du -h /path/to/directory......33.7M used in 0 directories, 25 files

De arbre de l'homme:

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories      (and their files, and so on). The total amount of used space is also given in the final report (like      the 'du -c' command.)

Les réponses ont rendu évident que du est l'outil pour trouver la taille totale d'un répertoire. Cependant, il y a quelques facteurs à considérer:

  • Occasionnellement, du la sortie 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. En règle générale, le système de fichiers allouera 4096 octets à un fichier même si vous n'y avez stocké qu'un seul caractère!

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

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

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

Exemple:

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

Vous pouvez utiliser l'outil Poussière:

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 provient de Windows, mais Linux et Apple sont également pris en charge:

https://github.com/bootandy/dust

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

Dans votre ~/.bashrc placez ce qui suit:

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"}

Enregistrez le fichier et la ressource en utilisant . ~/.bashrc (ou vous pouvez redémarrer votre terminal).


Sortie d'échantillon

La bonne chose à propos de ll la sortie est ses couleurs. Ceci est maintenu avec lll mais perdu lors de l'utilisation find ou du:

lll sample output.png


TL; DR

Une fonction bonus que vous pouvez ajouter à ~/.bashrc est appelé BytesToHuman(). Cela fait ce à quoi la plupart des utilisateurs de console s'attendraient en convertissant de 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 lll () fonction 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 vous réapprovisionner avec . ~/.bashrc chaque fois que vous apportez des modifications. (Ou redémarrer le terminal bien sûr)

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

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

man du

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

Rappel amical que cela peut n’avoir presque aucun sens sur un système de fichiers comme BTRFS.