DU: Ordner nur in der Tiefe anzeigen


11

Ich erhalte folgende Ausgabe du -h:

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

Ich möchte nur den am besten umsetzbaren Ordner anzeigen, nämlich den Ordner ./.wine/drive_c/windows/mono/mono-2.0/lib/mono

Gibt es eine Möglichkeit, den übergeordneten Ordner zu entfernen, wenn ein untergeordneter Ordner für den größten Teil der Speicherplatznutzung verantwortlich ist?

Eine Einstellung, bei der nur Blattordner angezeigt werden, reicht möglicherweise aus, oder eine Einstellung, bei der die Größe aller Unterordner von einem übergeordneten Ordner abgezogen wird, wenn die Größe des übergeordneten Ordners berechnet wird.


Dies ist oft einfacher visuell zu verfolgen; siehe Wie man versteht, was Platz beansprucht?
Gilles 'SO - hör auf böse zu sein'

Antworten:


11

Wenn Sie GNU du verwenden, können Sie die Option -Soder verwenden --separate-dirs, um die Größe der Unterverzeichnisse bei der Berechnung der Verwendung für das übergeordnete Element nicht zu berücksichtigen.

Ihr duBefehl unterstützt diese Option möglicherweise nicht.

Sie können dieses Paar mit sort verwenden, um die größten Einzelverzeichnisse abzurufen (unter der Annahme von GNU-Tools):

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

Dies scheint den Teil meiner Abfrage zu erfüllen, der die Größe aller Unterordner von einem übergeordneten Ordner subtrahiert, wenn die Größe des übergeordneten Ordners berechnet wird. Dies wird wahrscheinlich akzeptiert! Ich bin mir nicht sicher, ob es genau meinen Anforderungen entspricht (ich versuche, die am besten umsetzbaren Ordner zu finden, die gelöscht werden müssen, um Speicherplatz abzurufen)
EoghanM

9

Persönlich kombiniere ich es einfach mit der Kraft der GNU-Sorte:

du -ch | sort -h

Dadurch werden die Größen in einem für Menschen lesbaren Format sortiert. Beispielsweise:

$ 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

Von man sort:

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

Es werden immer noch diejenigen angezeigt, die Sie nicht interessieren, aber es ist jetzt sehr einfach, diejenigen zu finden, die Sie tun.


Nein, das macht es tatsächlich noch schlimmer, wie es jetzt 545M ./.wine/drive_coben in der Liste angezeigt wird, obwohl es nur Ordner und keine Dateien enthält, und es schwieriger macht zu sehen, wie der Speicherplatz unter den (rekursiven) Unterordnern von drive_c verteilt ist, weil sie nicht werden nicht nacheinander in der Liste angezeigt.
EoghanM

6

Wenn Sie nur eine übersichtliche Ansicht suchen, empfehle ich das durepPaket.

Beispielausgabe:

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/

Verwenden Sie den -tdParameter, um die maximale Tiefe anzugeben, und den -hsParameter, um eine minimale Größe für einen Ordner anzugeben, der in den Ergebnissen angezeigt werden soll.


2

Sie sind sich nicht sicher, ob Sie dies möchten, aber Sie können übergeordnete Verzeichnisse mithilfe von GNUs findentfernen -execdir:

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

Die -execdirOption ähnelt -execdem Befehl, führt ihn jedoch im Unterverzeichnis aus, in dem findeine Datei gefunden wurde.


hmmm, das scheint nicht so zu funktionieren, wie du es beschreibst. Ich bekomme immer noch viele übergeordnete Verzeichnisse in der Ausgabe.
EoghanM

2

Wenn Sie dueine feste Tiefe verwenden, du -m -d 2 .können Sie beispielsweise Linien ausblenden, die Ihre maximale Tiefe nicht erreichen, wie folgt:

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

In diesem Fall wollte ich eine Tiefe von 2 Verzeichnissen, daher habe ich die Ergebnisse nur mit 3 Feldern beibehalten, die mit dem awkSchlüsselwort definiert wurden, NFnachdem "/"ich zu Beginn mein Feldtrennzeichen angegeben hatte.


0

Diese beiden arbeiten für mich:

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

Ein kleiner Kommentar, damit die Zahlen übereinstimmen, sollte die Übereinstimmung in einem Listenkontext erfolgen, weshalb wir () benötigen.
Huw

du -h | perl -ne 'print, es sei denn (() = $ _ = ~ m # / # g)> 2'
huw
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.