La commande du n'analyse pas les répertoires cachés

25

Je souhaite estimer la quantité d'espace disque utilisée par un répertoire à l'aide de la commande suivante.

du -sh dir_name

qui ne calcule pas les répertoires cachés. Dans la page de manuel de du, il n'y a aucune information à ce sujet. Comment calculer la quantité d'espace disque utilisée par les répertoires, y compris les fichiers cachés.

Talespin_Kit
la source

Réponses:

13

En fait c'est le cas, voici la preuve:

mkdir .test
echo "hi" > .test/appo
du -a
4       ./.test/appo
8       ./.test
12      .

L' -aoption est utilisée pour montrer explicitement quels fichiers ont été comptés.

Utilisez-vous du *?

stivlo
la source
3
+1 pour... you maybe using "du *" ?
sehe
2
Je n'utilise pas "du *". J'ai oublié de mentionner dans la question que j'ai besoin du résumé total résumé. donc si j'utilise à la fois -a et -s comme dans du -as, j'obtiens un message d'erreur disant "du: ne peut pas à la fois résumer et afficher toutes les entrées". C'est un problème. L'autre chose est que même avec du -ai, je ne vois que les fichiers de premier niveau. c'est-à-dire incapable de voir les fichiers dans les répertoires cachés.
Talespin_Kit
1
J'ai juste ajouté -a pour afficher tous les fichiers en cours de comptage, n'ajoutez simplement pas cet indicateur, cela n'affecte que l'affichage, pas les totaux. Je vous ai montré un contre-exemple qui compte plutôt les répertoires cachés.
Stivlo
1
maintenant j'ai trouvé le problème. Le problème était que le répertoire caché était un lien symbolique, j'ai donc dû utiliser "du -Lsh dir_name". Merci.
Talespin_Kit
1
ah, je vois, heureux que vous l'ayez trouvé, cheers.
Stivlo
53

Cette commande vous montre la taille résumée des répertoires cachés

du -hs .[^.]*

ecerutti
la source
1
C'est exactement ce que je cherchais, merci :)
Nikana Reklawyks
c'est la bonne solution
3pns
ce serait génial si vous pouviez expliquer un peu la magie derrière. cela aiderait à former une réponse qui comprend des fichiers et des répertoires cachés et non cachés.
kumetix
13

La commande correcte est: du -hs $(ls -A)

$ du -hs $(ls -A)
0   test
0   .test

du -hs .* *, comme mentionné dans une autre réponse, n'est pas correct si vous souhaitez répertorier tous les fichiers et sous-répertoires (y compris ceux masqués).

Exemple :

$ touch test
$ touch .test
$ echo *
test
$ echo .* *
. .. .test test
$ du -hs .* *
4,0K    .
1,8G    ..

Pourquoi duse comporte-t-il ainsi? Parce que vous utilisez -squi résument le résultat et que tous les fichiers et sous-répertoires sont des enfants, .alors du -hsne les répertoriez pas!

Guillaume Missonnier
la source
11

Pour info, pour estimer la taille occupée par divers répertoires, il est préférable d'utiliser ncdu

Vous pouvez naviguer dans l'interface graphique de ncurses entre différents répertoires et cela montrera la taille de chaque répertoire. Si j'utilise du, je devrais exécuter la commande du pour chaque répertoire que je veux vérifier et qui peut être lourd. Vous pouvez également trier les répertoires en fonction de la taille occupée dans l'interface graphique de ncurses.

Abhijeet Rastogi
la source
1
Veuillez modifier votre réponse pour indiquer pourquoi vous pensez que ncdu est "beaucoup mieux". La page liée n'en dit pas vraiment autre que le fait que c'est une version basée sur ncurses du. Mis à part une méthode d'affichage plus sophistiquée, il n'y a aucune indication évidente de différence fonctionnelle.
Dave Sherohman
Je pense que la possibilité d'ajuster dynamiquement votre requête est un énorme avantage. Je peux exécuter ncdu sur ~, savoir quels répertoires utilisent le plus d'espace, puis plonger directement dans ceux-ci. Il vous donne également la dliaison pour supprimer les répertoires, afin que vous puissiez nettoyer directement à partir de l'interface.
user88974
5

C'est le cas et non. Exemple:

Dans le répertoire personnel: (un seul utilisateur existe)

du -sh /home/*
2.6G    /home/user

dans le répertoire utilisateur: (énorme différence entre les sommes)

du -sh *
61M     bin
2.0M    dump-20130124104823.tar.gz
651M    public_html
472K    twitter-2.0.0.gem
11M     wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2

et la raison en est:

du -sh /home/user/.rvm/
1.9G    /home/user/.rvm/

du calcule les répertoires cachés tout en descendant dans les sous-répertoires, mais dans le répertoire courant, le * ne correspond tout simplement pas au modèle .directory_name, donc les éléments cachés du répertoire courant seront omis.

Il m'a fallu un certain temps pour comprendre, et comme shadyabhi le recommande, cela aurait été évident si j'avais utilisé ncdu.

bonyiii
la source
1

La commande correcte est: du -hs .* *

moineau
la source
Quelques informations supplémentaires en feraient une réponse acceptable.
Ramhound
1

find -maxdepth 1 -exec du -sh "{}" \; | sort -h

Cela vous donne:

  • Taille des fichiers / répertoires cachés
  • Taille des fichiers / répertoires non masqués
  • Grandeur totale du répertoire courant

Il trie également la sortie pour voir facilement ce qui est le plus grand. J'en ai également fait un alias dans mon ~/.bash_aliasesfichier.

alias big='find -maxdepth 1 -exec du -sh "{}" \; | sort -h'
alias sbig='sudo find -maxdepth 1 -exec du -sh "{}" \; | sort -h'

Maintenant, je peux simplement exécuter bigpour trouver les plus gros répertoires dans un répertoire et sbigquand j'ai besoin des autorisations sudo.

Mitchell Tracy
la source
0
du -ahd1 | sort -hr | head -10

Voici la description de l' -doption dans du --help:

-d, --max-depth = N affiche le total pour un répertoire (ou fichier, avec --all) uniquement si N est inférieur ou inférieur à l'argument de la ligne de commande; --max-depth = 0 est identique à --summarize

luochen1990
la source
Bien que cela puisse aider à résoudre le problème, il n'explique pas pourquoi et / ou comment il résout le problème. Fournir ce contexte supplémentaire améliorerait considérablement sa valeur éducative à long terme. Veuillez modifier votre réponse pour ajouter des explications, y compris les limitations et hypothèses applicables. Merci.
fixer1234
0

Cette commande vous aidera à vérifier l'utilisation du disque dans le répertoire et à exécuter ce qui suit.
"du -sch. [!.] * * | sort -h"

Voici la démonstration de la façon de calculer l'utilisation du disque d'un répertoire particulier. J'ai créé un répertoire appelé Du_sh et créé deux fichiers (un caché de 10 Mo et un normal de 20 Mo) à l'intérieur.

nikhil@debian:~$ mkdir Du_sh nikhil@debian:~$ cd Du_sh/ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=.10MB bs=1024 count=10240 10240+0 records in 10240+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.0299941 s, 350 MB/s nikhil@debian:~/Du_sh$ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=20MB bs=2048 count=10240 10240+0 records in 10240+0 records out 20971520 bytes (21 MB, 20 MiB) copied, 0.0342258 s, 613 MB/s nikhil@debian:~/Du_sh$ du -sch .[!.]* * 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$ du -sch .[!.]* * | sort -h 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$

Nix Nikhil
la source