DU: klasörleri yalnızca derinlemesine göster


12

du -hAşağıdaki gibi çıktı alıyorum :

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

Yalnızca en işlem yapılabilir klasörü göstermek istiyorum, bu klasör ./.wine/drive_c/windows/mono/mono-2.0/lib/mono

Disk alanı kullanımının çoğundan bir alt klasör sorumluysa, üst klasörü kaldırmanın bir yolu var mı?

Yalnızca yaprak klasörlerini gösterme ayarı hile yapabilir veya üst klasörün boyutunu hesaplarken tüm alt klasörlerin boyutunu üst klasörden çıkarabilir.


Bu, görsel olarak izlenmesi genellikle daha kolaydır; bkz . Yer kaplayan şeyleri nasıl anlayabilirim?
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


12

GNU du kullanıyorsanız , üst öğenin kullanımını hesaplarken alt dizinlerin boyutunu dahil etmemek için -Sveya --separate-dirsseçeneğini kullanabilirsiniz .

Sizin dukomut bu seçeneği desteklemeyebilir.

Bu çifti en büyük bireysel dizinleri (GNU araçlarını varsayarak) almak için sıralama ile kullanabilirsiniz:

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

Bu, sorgumun 'üst klasörün boyutunu hesaplarken bir üst klasördeki tüm alt klasörlerin boyutunu çıkart' bölümünü tatmin edecek gibi görünüyor, bu yüzden muhtemelen kabul edecek! Gereksinimlerimi tam olarak
karşıladığından

9

Şahsen, sadece GNU türünün gücü ile birleştiriyorum:

du -ch | sort -h

Bu, boyutların insan tarafından okunabilir bir biçimde sıralanmasına neden olur. Örneğin:

$ 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

Gönderen man sort:

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

Hala umursadıklarınızı gösteriyor, ama şimdi yaptıklarınızı bulmak çok kolay.


Hayır, bu sadece daha da kötüleştiriyor, şimdi 545M ./.wine/drive_csadece klasörleri ve dosyaları içermemesine rağmen listenin en üstünde göründüğü gibi ve sürücü_c'nin (özyinelemeli) alt klasörleri arasında boşluğun nasıl dağıldığını görmeyi zorlaştırıyor listede art arda görünmüyor.
EoghanM

6

Sadece açık bir şekilde düzenlenmiş bir görünüm arıyorsanız, dureppaketi tavsiye ederim .

Örnek çıktı:

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/

Kullanım -tdmaksimum derinliği belirtmek için parametreyi ve -hsbir klasör sonuçlarında göstermek için parametre minimum boyutu belirtmek için.


2

Değil gerçekten emin bu istediğini, ancak GNU kullanarak üst dizinleri şerit eğer find'ler -execdir:

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

-execdirSeçenek benzer -execancak alt dizininde tedarik komutu yürütür findbir dosya buldu.


hmmm, tanımladığınız gibi çalışmıyor. Hala çıktıda çok sayıda üst dizin alıyorum.
EoghanM

2

Eğer kullanıyorsanız dusabit derinliğe, örneğin du -m -d 2 ., sadece bu yüzden gibi maksimum derinlik ulaşmayan satırları maskı:

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

Bu durumda, 2 dizin derinliği istedim, bu yüzden başlangıçta alan ayırıcı olarak belirledikten sonra sadece awkanahtar kelime ile tanımlanan 3 alanlı sonuçları tuttum .NF"/"


0

Her ikisi de benim için çalışıyor:

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

Biraz yorum, sayıları eşleştirmek için, maç neden ihtiyaç duyduğumuz bir liste bağlamında olmalıdır ().
huw

du -h | perl -ne 'baskı (() = $ _ = ~ m # / # g)> 2 sürece'
huw
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.