DU: chỉ hiển thị các thư mục ở độ sâu


11

Tôi nhận được đầu ra du -hnhư sau:

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

Tôi chỉ muốn hiển thị thư mục dễ thao tác nhất, đó là thư mục ./.wine/drive_c/windows/mono/mono-2.0/lib/mono

Có cách nào để loại bỏ thư mục mẹ nếu một thư mục con chịu trách nhiệm cho hầu hết việc sử dụng không gian đĩa?

Một cài đặt chỉ hiển thị các thư mục lá có thể thực hiện mẹo hoặc cài đặt để trừ kích thước của tất cả các thư mục con khỏi thư mục mẹ khi tính kích thước của thư mục mẹ.


Điều này thường dễ dàng hơn để theo dõi trực quan; xem Làm thế nào để hiểu những gì chiếm không gian?
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


11

Nếu bạn đang sử dụng GNU du, bạn có thể sử dụng -Shoặc --separate-dirstùy chọn để không bao gồm kích thước của các thư mục con khi tính toán mức sử dụng cho cha mẹ.

duLệnh của bạn có thể không hỗ trợ tùy chọn này.

Bạn có thể sử dụng cặp này với sort để lấy các thư mục riêng lẻ lớn nhất (giả sử các công cụ GNU):

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

Điều này dường như thỏa mãn 'trừ kích thước của tất cả các thư mục con khỏi thư mục mẹ khi tính kích thước của thư mục mẹ' trong truy vấn của tôi, vì vậy có thể sẽ chấp nhận! Tôi không chắc chắn rằng nó đáp ứng chính xác nhu cầu của tôi (cố gắng tìm các thư mục dễ thao tác nhất để xóa để lấy lại dung lượng)
EoghanM

9

Cá nhân, tôi chỉ kết hợp nó với sức mạnh của sắp xếp GNU:

du -ch | sort -h

Điều này sẽ khiến các kích thước được sắp xếp theo định dạng có thể đọc được. Ví dụ:

$ 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

Từ man sort:

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

Nó vẫn hiển thị những cái bạn không quan tâm, nhưng bây giờ rất dễ tìm thấy những cái bạn làm.


Không, điều đó thực sự làm cho nó tồi tệ hơn, vì bây giờ nó hiển thị 545M ./.wine/drive_cở đầu danh sách, mặc dù chỉ chứa các thư mục và không có tệp, và làm cho việc xem không gian được phân phối giữa các thư mục con (đệ quy) của drive_c khó khăn hơn bởi vì chúng không Không xuất hiện liên tiếp trong danh sách.
EoghanM

6

Nếu bạn chỉ tìm kiếm một khung nhìn được sắp xếp rõ ràng, tôi khuyên bạn nên durepgói.

Ví dụ đầu ra:

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/

Sử dụng -tdtham số để chỉ định độ sâu tối đa và -hstham số để chỉ định kích thước tối thiểu cho thư mục hiển thị trong kết quả.


2

Không thực sự chắc chắn nếu điều này là những gì bạn muốn, nhưng bạn có thể tước danh bạ cha mẹ sử dụng GNU find's -execdir:

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

Các -execdirtùy chọn tương tự như -execnhưng thực thi lệnh mà bạn cung cấp trong thư mục con trong đó findđã tìm thấy một tập tin.


hmmm, điều đó dường như không hoạt động như bạn mô tả. Tôi vẫn nhận được rất nhiều thư mục cha trong đầu ra.
EoghanM

2

Nếu bạn đang sử dụng duđến một độ sâu cố định, ví dụ: du -m -d 2 .bạn chỉ có thể che đi những đường không đạt đến độ sâu tối đa của mình như vậy:

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

Trong trường hợp này, tôi muốn độ sâu của 2 thư mục vì vậy tôi chỉ giữ kết quả với 3 trường như được xác định với awktừ khóa NFsau khi chỉ định "/"làm dấu tách trường của tôi khi bắt đầu.


0

Cả hai đều làm việc cho tôi:

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

Một chút nhận xét, để có được các số khớp nhau, trận đấu phải nằm trong ngữ cảnh danh sách mà tại sao chúng ta cần ().
huw

du -h | in perl -ne 'trừ khi (() = $ _ = ~ m # / # g)> 2'
huw
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.