DU: wyświetla foldery tylko na głębokości

12

Otrzymuję dane wyjściowe z du -hnastępujących:

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

Chciałbym pokazać tylko folder, w którym można najwięcej akcji, którym jest folder ./.wine/drive_c/windows/mono/mono-2.0/lib/mono

Czy istnieje jakiś sposób na usunięcie folderu nadrzędnego, jeśli folder podrzędny jest odpowiedzialny za większość miejsca na dysku?

Ustawienie pokazujące tylko foldery liści może załatwić sprawę lub ustawienie odejmowania wielkości wszystkich podfolderów od folderu nadrzędnego podczas obliczania rozmiaru folderu nadrzędnego.

Eoghan
źródło
Często jest to łatwiejsze do śledzenia wizualnego; zobacz Jak zrozumieć, co zajmuje przestrzeń?
Gilles „SO- przestań być zły”

Odpowiedzi:

12

Jeśli używasz GNU du, możesz użyć opcji -Slub --separate-dirs, aby nie uwzględniać rozmiaru podkatalogów podczas obliczania zużycia dla elementu nadrzędnego.

Twoje dupolecenie może nie obsługiwać tej opcji.

Możesz użyć tej pary z sortowaniem, aby uzyskać największe pojedyncze katalogi (zakładając narzędzia GNU):

du --separate-dirs -h . |sort -h
Craig
źródło
Wydaje się, że spełnia to część „odejmij rozmiar wszystkich podfolderów z folderu nadrzędnego podczas obliczania rozmiaru folderu nadrzędnego” w moim zapytaniu, więc prawdopodobnie zaakceptujesz! Nie jestem jednak pewien, czy dokładnie spełnia moje potrzeby (próbuje znaleźć najbardziej przydatne foldery do usunięcia w celu odzyskania miejsca)
EoghanM
9

Osobiście po prostu łączę to z mocą GNU sort:

du -ch | sort -h

Spowoduje to, że rozmiary zostaną posortowane w formacie czytelnym dla człowieka. Na przykład:

$ 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

Od man sort:

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

Nadal pokazuje te, na których ci nie zależy, ale teraz bardzo łatwo jest znaleźć te, które robisz.

terdon
źródło
Nie, to faktycznie pogarsza sytuację, ponieważ teraz pokazuje się 545M ./.wine/drive_cna górze listy, mimo że zawiera tylko foldery i nie ma plików, i utrudnia zobaczenie, jak przestrzeń jest rozdzielana między (rekurencyjnymi) podfolderami drive_c, ponieważ nie nie pojawiają się kolejno na liście.
EoghanM,
6

Jeśli szukasz przejrzystego widoku, polecam dureppakiet.

Przykładowe dane wyjściowe:

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/

Użyj -tdparametru, aby określić maksymalną głębokość, oraz -hsparametru, aby określić minimalny rozmiar folderu, który będzie wyświetlany w wynikach.

Martin von Wittich
źródło
2

Naprawdę nie jestem pewien, czy to jest to, co chcesz, ale można rozebrać katalogów nadrzędnych za pomocą GNU find„s -execdir:

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

Ta -execdiropcja jest podobna, -execale wykonuje polecenie podane w podkatalogu, w którym findznalazł plik.

Joseph R.
źródło
hmmm, to nie działa tak, jak to opisujesz. Wciąż otrzymuję wiele katalogów nadrzędnych w danych wyjściowych.
EoghanM,
2

Jeśli korzystasz duz ustalonej głębokości, np. du -m -d 2 .Możesz po prostu zamaskować linie, które nie osiągają maksymalnej głębokości, w następujący sposób:

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

W tym przypadku chciałem mieć głębokość 2 katalogów, więc zachowałem wyniki tylko z 3 polami zdefiniowanymi awksłowem kluczowym NFpo określeniu "/"jako separatora pól na początku.

koło zamachowe
źródło
0

Oba działają dla mnie:

 du -h | perl -ne '$n=()=$_=~m#/#g;  print unless $n > 2'
 du -h | perl -ne 'print unless ($n=()=$_=~m#/#g) > 2 '
huw
źródło
Trochę komentarza, aby dopasować liczby, dopasowanie powinno odbywać się w kontekście listy, dlatego potrzebujemy ().
huw
du -h | perl -ne 'print chyba (() = $ _ = ~ m # / # g)> 2'
CWU