DU: afficher uniquement les dossiers en profondeur

11

J'obtiens une sortie du -hcomme celle-ci:

103M    ./.wine/drive_c/windows/mono/mono-2.0/lib/mono
103M    ./.wine/drive_c/windows/mono/mono-2.0/lib
129M    ./.wine/drive_c/windows/mono/mono-2.0
129M    ./.wine/drive_c/windows/mono
362M    ./.wine/drive_c/windows
545M    ./.wine/drive_c

Je souhaite n'afficher que le dossier le plus exploitable, qui est le dossier ./.wine/drive_c/windows/mono/mono-2.0/lib/mono

Existe-t-il un moyen de supprimer le dossier parent si un dossier enfant est responsable de la majeure partie de l'utilisation de l'espace disque?

Un paramètre pour afficher uniquement les dossiers feuilles peut faire l'affaire, ou un paramètre pour soustraire la taille de tous les sous-dossiers d'un dossier parent lors du calcul de la taille du dossier parent.

EoghanM
la source
Ceci est souvent plus facile à suivre visuellement; voir Comment comprendre ce qui prend de la place?
Gilles 'SO- arrête d'être méchant'

Réponses:

11

Si vous utilisez GNU du, vous pouvez utiliser l' option -Sou --separate-dirspour ne pas inclure la taille des sous-répertoires lors du calcul de l'utilisation pour le parent.

Votre ducommande peut ne pas prendre en charge cette option.

Vous pouvez utiliser ce couple avec sort pour obtenir les plus grands répertoires individuels (en supposant que les outils GNU):

du --separate-dirs -h . |sort -h
Craig
la source
Cela semble satisfaire la partie «soustraire la taille de tous les sous-dossiers d'un dossier parent lors du calcul de la taille du dossier parent» de ma requête, donc j'accepterai probablement! Je ne suis pas sûr que cela réponde exactement à mes besoins (en essayant de trouver les dossiers les plus exploitables à supprimer afin de récupérer de l'espace)
EoghanM
9

Personnellement, je viens de le combiner avec la puissance du tri GNU:

du -ch | sort -h

Cela entraînera le tri des tailles dans un format lisible par l'homme. Par exemple:

$ du -h /usr/ | head -20 | sort -h
8.0K    /usr/src/linux-headers-3.2.0-3-common/include/misc
12K /usr/src/linux-headers-3.2.0-3-common/include/drm/i2c
12K /usr/src/linux-headers-3.2.0-3-common/include/net/netfilter/ipv4
16K /usr/src/linux-headers-3.2.0-3-common/include/net/netfilter/ipv6
20K /usr/src/linux-headers-3.2.0-3-common/include/net/phonet
28K /usr/src/linux-headers-3.2.0-3-common/include/acpi/platform
52K /usr/src/linux-headers-3.2.0-3-common/include/net/netns
60K /usr/lib32/libv4l
76K /usr/src/linux-headers-3.2.0-3-common/include/net/caif
96K /usr/src/linux-headers-3.2.0-3-common/include/scsi/fc
108K    /usr/src/linux-headers-3.2.0-3-common/include/net/bluetooth
112K    /usr/src/linux-headers-3.2.0-3-common/include/drm/ttm
148K    /usr/src/linux-headers-3.2.0-3-common/include/net/netfilter
264K    /usr/src/linux-headers-3.2.0-3-common/include/rdma
284K    /usr/src/linux-headers-3.2.0-3-common/include/acpi
596K    /usr/src/linux-headers-3.2.0-3-common/include/drm
608K    /usr/src/linux-headers-3.2.0-3-common/include/scsi
668K    /usr/games
6.3M    /usr/lib32/gconv
8.9M    /usr/lib32

De man sort:

   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)

Il montre toujours ceux qui ne vous intéressent pas, mais il est maintenant très facile de trouver ceux que vous faites.

terdon
la source
Non, cela aggrave en fait, comme maintenant, il apparaît 545M ./.wine/drive_cen haut de la liste, même s'il ne contient que des dossiers et aucun fichier, et rend plus difficile de voir comment l'espace est réparti entre les sous-dossiers (récursifs) de drive_c parce qu'ils ne n'apparaissent pas consécutivement dans la liste.
EoghanM
6

Si vous cherchez juste une vue claire, je recommande le dureppackage.

Exemple de sortie:

root@dogmeat:~# durep -td 4 -hs 50M /usr/
[ /usr     4.8G (0 files, 9 dirs) ]
   1.9G [###########                   ]  38.57% lib/
     463.6M [#######                       ]  24.46% x86_64-linux-gnu/
         102.3M [######                        ]  22.07% wine/
     276.2M [####                          ]  14.57% i386-linux-gnu/
          96.1M [##########                    ]  34.80% wine/
     222.4M [###                           ]  11.73% libreoffice/
         189.3M [#########################     ]  85.12% program/
     122.6M [#                             ]   6.47% chromium-browser/
          87.6M [#####################         ]  71.46% chromium-browser
      79.5M [#                             ]   4.19% virtualbox/
      79.4M [#                             ]   4.19% jvm/
          73.4M [###########################   ]  92.52% java-7-openjdk-amd64/
              73.4M [############################# ]  99.99% jre/
      75.7M [#                             ]   3.99% python2.7/
          58.4M [#######################       ]  77.21% dist-packages/
      58.9M [                              ]   3.11% firefox/
      52.2M [                              ]   2.75% libwireshark.so.2.0.2
   1.4G [########                      ]  29.56% src/
   1.2G [#######                       ]  26.03% share/
     211.6M [####                          ]  16.54% fonts/
         199.3M [############################  ]  94.18% truetype/
              84.2M [############                  ]  42.23% horai-umefont/
     174.6M [####                          ]  13.64% icons/
          91.5M [###############               ]  52.39% gnome/
              66.4M [#####################         ]  72.60% icon-theme.cache
      77.5M [#                             ]   6.05% gimp/
          77.5M [##############################] 100.00% 2.0/
              66.2M [#########################     ]  85.43% help/
      74.4M [#                             ]   5.82% virtualbox/
          56.9M [######################        ]  76.42% VBoxGuestAdditions.iso
      62.9M [#                             ]   4.91% doc/
 240.1M [#                             ]   4.89% bin/

Utilisez le -tdparamètre pour spécifier la profondeur maximale et le -hsparamètre pour spécifier une taille minimale pour un dossier à afficher dans les résultats.

Martin von Wittich
la source
2

Pas vraiment sûr si c'est ce que vous voulez, mais vous pouvez dépouiller les répertoires parents utilisant GNU find« s -execdir:

find . -type d -execdir du -ch "{}" \;

L' -execdiroption est similaire à -execmais exécute la commande que vous fournissez dans le sous-répertoire où finda trouvé un fichier.

Joseph R.
la source
hmmm, cela ne semble pas fonctionner comme vous le décrivez. Je reçois toujours beaucoup de répertoires parents dans la sortie.
EoghanM
2

Si vous utilisez duune profondeur fixe, par exemple du -m -d 2 ., vous pouvez simplement masquer les lignes qui n'atteignent pas votre profondeur maximale comme suit:

du -m -d 2 . | sort -k1n | awk -F"/" 'NF==3'

Dans ce cas, je voulais une profondeur de 2 répertoires, donc je n'ai gardé les résultats qu'avec 3 champs définis avec le awkmot-clé NFaprès avoir spécifié "/"comme séparateur de champ au début.

roue isocèle
la source
0

Ces deux fonctionnent pour moi:

 du -h | perl -ne '$n=()=$_=~m#/#g;  print unless $n > 2'
 du -h | perl -ne 'print unless ($n=()=$_=~m#/#g) > 2 '
huw
la source
Un petit commentaire, pour obtenir la correspondance des nombres, la correspondance doit être dans un contexte de liste pour laquelle nous avons besoin de ().
huw
du -h | perl -ne 'print sauf (() = $ _ = ~ m # / # g)> 2'
huw