DU: mostra solo le cartelle in profondità


11

Ricevo un output du -hsimile al seguente:

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

Vorrei mostrare solo la cartella più utilizzabile, che è la cartella ./.wine/drive_c/windows/mono/mono-2.0/lib/mono

Esiste un modo per rimuovere la cartella padre se una cartella figlio è responsabile della maggior parte dell'utilizzo dello spazio su disco?

Un'impostazione per mostrare solo le cartelle foglia potrebbe fare il trucco o un'impostazione per sottrarre la dimensione di tutte le sottocartelle da una cartella principale quando si calcola la dimensione della cartella principale.


Questo è spesso più facile da tracciare visivamente; vedi Come capire cosa sta occupando spazio?
Gilles 'SO- smetti di essere malvagio' il

Risposte:


11

Se stai usando GNU du puoi usare l' opzione -So --separate-dirsper non includere la dimensione delle sottodirectory quando calcoli l'utilizzo per il genitore.

Il tuo ducomando potrebbe non supportare questa opzione.

È possibile utilizzare questa coppia con ordinamento per ottenere le singole directory più grandi (presupponendo strumenti GNU):

du --separate-dirs -h . |sort -h

Questo sembra soddisfare la parte 'sottrarre la dimensione di tutte le sottocartelle da una cartella principale quando si calcola la dimensione della cartella principale' della mia query, quindi probabilmente accetterò! Non sono sicuro che soddisfi esattamente le mie esigenze (cercare di trovare le cartelle più utilizzabili da eliminare per recuperare spazio)
EoghanM

9

Personalmente, lo combino solo con la potenza dell'ordinamento GNU:

du -ch | sort -h

Ciò farà sì che le dimensioni vengano ordinate in un formato leggibile. Per esempio:

$ 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

Da man sort:

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

Mostra ancora quelli che non ti interessano, ma ora è molto facile trovare quelli che fai.


No, questo in realtà lo peggiora, come ora mostra 545M ./.wine/drive_cin cima all'elenco, anche se contiene solo cartelle e nessun file, e rende più difficile vedere come lo spazio è distribuito tra le sottocartelle (ricorsive) di drive_c perché non non appare consecutivamente nell'elenco.
EoghanM,

6

Se stai solo cercando una vista ben organizzata, ti consiglio il dureppacchetto.

Esempio di output:

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/

Utilizzare il -tdparametro per specificare la profondità massima e il -hsparametro per specificare una dimensione minima affinché una cartella venga visualizzata nei risultati.


2

Non proprio sicuro se questo è ciò che si vuole, ma si può spogliare directory principali utilizzando GNU find's -execdir:

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

L' -execdiropzione è simile -execma esegue il comando fornito nella sottodirectory in cui findè stato trovato un file.


hmmm, quello non sembra funzionare come descrivi. Sto ancora ottenendo molte directory principali nell'output.
EoghanM,

2

Se stai usando duuna profondità fissa, ad esempio du -m -d 2 ., potresti semplicemente mascherare le linee che non raggiungono la tua profondità massima in questo modo:

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

In questo caso, volevo una profondità di 2 directory, quindi ho mantenuto i risultati solo con 3 campi definiti con la awkparola chiave NFdopo aver specificato "/"come separatore di campo all'inizio.


0

Entrambi funzionano per me:

 du -h | perl -ne '$n=()=$_=~m#/#g;  print unless $n > 2'
 du -h | perl -ne 'print unless ($n=()=$_=~m#/#g) > 2 '

Un po 'di commento, per ottenere i numeri abbinati, la corrispondenza dovrebbe essere in un contesto di elenco che è il motivo per cui abbiamo bisogno ().
huw,

du -h | perl -ne 'stampa a meno che (() = $ _ = ~ m # / # g)> 2'
huw,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.