DU: hanya tampilkan folder secara mendalam


11

Saya mendapatkan output dari du -hseperti berikut:

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

Saya hanya ingin menunjukkan folder yang paling bisa ditindaklanjuti, yaitu folder ./.wine/drive_c/windows/mono/mono-2.0/lib/mono

Apakah ada cara menghapus folder induk jika folder anak bertanggung jawab atas sebagian besar penggunaan ruang disk?

Pengaturan untuk hanya menampilkan folder daun mungkin melakukan trik, atau pengaturan untuk mengurangi ukuran semua subfolder dari folder induk saat menghitung ukuran folder induk.


Ini seringkali lebih mudah untuk dilacak secara visual; lihat Bagaimana memahami apa yang menghabiskan ruang?
Gilles 'SO- stop being evil'

Jawaban:


11

Jika Anda menggunakan GNU du, Anda dapat menggunakan opsi -Satau --separate-dirsuntuk tidak menyertakan ukuran subdirektori saat menghitung penggunaan untuk induk.

duPerintah Anda mungkin tidak mendukung opsi ini.

Anda dapat menggunakan pasangan ini dengan sortir untuk mendapatkan direktori individual terbesar (dengan asumsi alat GNU):

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

Ini sepertinya memenuhi bagian 'kurangi ukuran semua subfolder dari folder induk saat menghitung ukuran folder induk' dari permintaan saya, jadi kemungkinan besar akan menerima! Saya tidak yakin itu benar-benar memuaskan kebutuhan saya (mencoba mencari folder yang paling bisa ditindaklanjuti untuk mengambil ruang)
EoghanM

9

Secara pribadi, saya hanya menggabungkannya dengan kekuatan GNU sort:

du -ch | sort -h

Ini akan menyebabkan ukuran diurutkan dalam format yang dapat dibaca manusia. Sebagai contoh:

$ 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

Dari man sort:

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

Itu masih menunjukkan yang tidak Anda pedulikan, tetapi sekarang sangat mudah untuk menemukan yang Anda lakukan.


Tidak, itu benar-benar membuatnya lebih buruk, seperti yang sekarang terlihat 545M ./.wine/drive_cdi bagian atas daftar, meskipun itu hanya berisi folder dan tidak ada file, dan membuatnya lebih sulit untuk melihat bagaimana ruang didistribusikan di antara subfolder (rekursif) drive_c karena mereka tidak akan muncul berurutan dalam daftar.
EoghanM

6

Jika Anda hanya mencari tampilan yang diatur dengan jelas, saya sarankan dureppaket.

Contoh 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/

Gunakan -tdparameter untuk menentukan kedalaman maksimum, dan -hsparameter untuk menentukan ukuran minimum untuk folder muncul di hasil.


2

Tidak benar-benar yakin apakah ini adalah apa yang Anda inginkan, tetapi Anda dapat strip direktori induk menggunakan GNU find's -execdir:

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

The -execdirpilihan adalah mirip dengan -exectetapi mengeksekusi perintah Anda pasokan di subdirektori di mana findtelah menemukan file.


hmmm, itu sepertinya tidak berfungsi seperti yang Anda gambarkan. Saya masih mendapatkan banyak direktori induk di output.
EoghanM

2

Jika Anda menggunakan dukedalaman tetap, misalnya du -m -d 2 ., Anda bisa saja menutupi garis yang tidak mencapai kedalaman maksimal seperti:

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

Dalam hal ini, saya menginginkan kedalaman 2 direktori jadi saya hanya menyimpan hasilnya dengan 3 bidang seperti yang didefinisikan dengan awkkata kunci NFsetelah menentukan "/"sebagai pemisah bidang saya di awal.


0

Keduanya bekerja untuk saya:

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

Sedikit komentar, untuk mendapatkan angka yang cocok, pertandingan harus dalam konteks daftar itu sebabnya kita perlu ().
huw

du-h | perl -ne 'print kecuali (() = $ _ = ~ m # / # g)> 2'
huw
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.