DU: показувати папки лише на глибині


12

Я отримую результат від 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

Я хотів би показати лише саму діючу папку - папку ./.wine/drive_c/windows/mono/mono-2.0/lib/mono

Чи є спосіб видалення батьківської папки, якщо дочірня папка відповідає за більшу частину використання дискового простору?

Налаштування показу лише папок листів може зробити трюк або налаштування для віднімання розміру всіх папок з батьківської папки при обчисленні розміру батьківської папки.


Це часто простіше відстежувати візуально; див. Як зрозуміти, що займає місце?
Жил "ТАК - перестань бути злим"

Відповіді:


12

Якщо ви використовуєте GNU du, ви можете використовувати -Sабо --separate-dirsпараметр не включати розмір підкаталогів під час обчислення використання для батьків.

Ваша duкоманда може не підтримувати цю опцію.

Ви можете використовувати цю пару з сортуванням, щоб отримати найбільші окремі каталоги (якщо припустити інструменти GNU):

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

Здається, це задовольняє "відняти розмір усіх підпапок з батьківської папки при обчисленні розміру батьківської папки" частини мого запиту, тому, ймовірно, прийму! Я не впевнений, що це точно задовольняє мої потреби (намагаючись знайти найбільш діючі папки, які слід видалити, щоб знайти простір)
EoghanM

9

Особисто я просто поєдную це з потужністю GNU сортування:

du -ch | sort -h

Це призведе до сортування розмірів у читаному для людини форматі. Наприклад:

$ 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

Від man sort:

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

На ньому все ще відображаються ті, які вам не байдужі, але зараз дуже легко знайти ті, що ви робите.


Ні, це насправді робить це гірше, як зараз він відображається 545M ./.wine/drive_cу верхній частині списку, навіть якщо він містить лише папки та відсутні файли, і ускладнює бачення розподілу місця між (рекурсивними) папками drive_c, оскільки вони не не відображаються послідовно у списку.
EoghanM

6

Якщо ви просто шукаєте чітко влаштований вид, рекомендую durepпакет.

Приклад виводу:

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/

Використовуйте -tdпараметр для визначення максимальної глибини, а -hsпараметр - для визначення мінімального розміру для папки, яка відображатиметься в результатах.


2

Не зовсім впевнений , якщо це те , що ви хочете, але ви можете позбавити батьківські каталоги з допомогою GNU find«s -execdir:

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

-execdirВаріант аналогічний , -execале виконує команду, поставити в підкаталозі , де findзнайшов файл.


Хм, це, здається, не працює, як ви описуєте. Я все ще отримую багато батьківських каталогів на виході.
EoghanM

2

Якщо ви використовуєте duна фіксовану глибину, наприклад du -m -d 2 ., ви можете просто замаскувати лінії, які не досягають вашої максимальної глибини, наприклад:

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

У цьому випадку я хотів глибину 2 каталогів, тому я зберігав результати лише з 3-х полів, визначених awkключовим словом, NFпісля того, "/"як вказав як мій роздільник полів на початку.


0

Вони обидва працюють для мене:

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

Трохи прокоментуйте, щоб відповідати числам, відповідність має бути в контексті списку, що саме для цього нам потрібно ().
huw

ду -х | perl -ne 'print, якщо (() = $ _ = ~ m # / # g)> 2'
хуй
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.