Câu hỏi Làm thế nào để có được kích thước tóm tắt của thư mục và thư mục con của họ?


Hãy nói rằng tôi muốn có được kích thước của mỗi thư mục của một hệ thống tập tin Linux. Khi tôi sử dụng ls -la Tôi không thực sự nhận được kích thước tóm tắt của các thư mục.

Nếu tôi sử dụng df Tôi nhận được kích thước của mỗi hệ thống tập tin được gắn kết nhưng điều đó cũng không giúp tôi. Và với du Tôi nhận được kích thước của mỗi thư mục con và tóm tắt của toàn bộ hệ thống tập tin.

Nhưng tôi muốn chỉ có kích thước tóm tắt của mỗi thư mục trong thư mục ROOT của hệ thống tệp. Có lệnh nào để đạt được điều đó không?


259
2017-07-11 17:26


gốc


Các --total cờ là hữu ích cho tôi. Ví dụ. du -sh --total applications/*. askubuntu.com/a/465436/48214 - Ryan


Các câu trả lời:


Điều này làm những gì bạn đang tìm kiếm:

du -sh /*

Điều này có nghĩa là:

  • -s chỉ đưa ra tổng số cho mỗi đối số dòng lệnh.
  • -h cho hậu tố có thể đọc được của con người như M cho megabyte và G cho gigabyte (tùy chọn).
  • /* đơn giản mở rộng cho tất cả các thư mục (và các tệp) trong /.

    Lưu ý: dotfiles không được bao gồm; chạy shopt -s dotglob để bao gồm cả những người quá.

Cũng hữu ích là sắp xếp theo kích thước:

du -sh /* | sort -h

Đây:

  • -h đảm bảo rằng sort diễn giải các hậu tố có thể đọc được chính xác.

367
2017-07-11 17:28



Nếu bạn có dấu chấm-thư mục trong thư mục gốc, bạn có thể sử dụng shopt -s dotglob để bao gồm chúng trong số lượng. - Philipp
Nó rất hữu ích, bởi vì nó đơn giản và bạn có thể đặt con đường bạn muốn thay vì /*, ví dụ. ./ cho thư mục hiện tại hoặc ./* cho mỗi mục trong thư mục hiện tại. - psur
@psur hoặc bạn có thể sử dụng ./*/ để chỉ nhận các thư mục con chứ không phải tất cả các mục - relascope
Phiên bản được sắp xếp: du -sh /* | sort -h - Vu Anh
@ c1phr Nếu sort không có -h, bạn cần phải rời khỏi nó du là tốt, nếu không việc phân loại sẽ trộn lên kilo / mega / gigabyte. du -s /* | sort -nr. - Thomas


Tôi thường cần phải tìm các thư mục lớn nhất, vì vậy để có được một danh sách được sắp xếp có chứa 20 dirs lớn nhất tôi làm điều này:

du -m /some/path | sort -nr | head -n 20

Trong trường hợp này, kích thước sẽ được báo cáo bằng megabyte.


70
2017-07-29 12:07



Đây là một cách để làm cho nó dễ đọc hơn du -sh / some / path | sắp xếp | đầu -n 20 - Xedecimal
@ Xedecima vấn đề với việc sử dụng h là sắp xếp không biết cách xử lý các kích thước khác nhau. Ví dụ: 268K được sắp xếp cao hơn 255M và cả hai được sắp xếp cao hơn 2,7G - chrisan
Đối số -h (con người có thể đọc được) trên lệnh 'sort' phải đọc đúng các giá trị này. Cũng giống như du-cờ xuất khẩu chúng. Tùy thuộc vào những gì bạn đang chạy tôi đoán. - Xedecimal
Hoạt động trên Ubuntu 16.04. Mẹo hay. - SDsolar


Tôi thích sử dụng Ncdu cho điều đó, bạn có thể sử dụng con trỏ để điều hướng và xem chi tiết cấu trúc thư mục nó hoạt động thực sự tốt.


14
2017-12-24 10:07





Các câu trả lời hiện có rất hữu ích, có thể một số người mới bắt đầu (như tôi) cũng sẽ thấy điều này hữu ích.

  1. Vòng lặp rất cơ bản, nhưng đối với tôi, đây là một khởi đầu tốt cho một số hoạt động liên quan đến kích thước khác:

    for each in $(ls) ; do du -hs "$each" ; done
    
  2. Rất giống với câu trả lời đầu tiên và gần như là kết quả tương tự như 1.), nhưng tôi mất một thời gian để hiểu sự khác biệt của * đối với ./* nếu trong thư mục con:

    du -sh ./*
    

9
2017-11-22 16:53





Sau đây du lời gọi nên hoạt động trên các hệ thống BSD:

du -d 1 /

6
2017-07-11 17:29



Của tôi du (Ubuntu 10.4) không có -d Tùy chọn. Bạn đang sử dụng hệ thống nào? - Thomas
Trên openSUSE của tôi, nó không có tùy chọn -d :( - 2ndkauboy
OK, sau đó nó là một tùy chọn BSD chỉ (Tôi đang ở trên OS X). - Philipp
Kết hợp tùy chọn di động phù hợp trên BSD / * NIX là du -sk /*. Tôi ghét -k nhiều thứ. Linux ' -h hoàn toàn đá. - Dummy00001
trong các hệ thống khác, --max-depth - Vishnu Kumar


Điều này không dễ. Các du lệnh hiển thị các tệp và thư mục (mặc định) hoặc chỉ kích thước của tất cả các mục mà bạn chỉ định trên dòng lệnh (tùy chọn -s).

Để có được các mục lớn nhất (tệp và thư mục), được sắp xếp, với kích thước có thể đọc được trên con người trên Linux:

du -h | sort -h

Điều này sẽ chôn bạn trong một tấn tập tin nhỏ. Bạn có thể loại bỏ chúng với --threshold (1 MB trong ví dụ của tôi):

du --threshold=1M -h | sort -h

Ưu điểm của lệnh này là nó bao gồm các thư mục dấu chấm ẩn (các thư mục bắt đầu bằng .).

Nếu bạn thực sự chỉ muốn các thư mục, bạn cần phải sử dụng find nhưng điều này có thể rất, rất chậm du sẽ phải quét nhiều thư mục nhiều lần:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h

3
2017-07-24 11:04



--threshold ^^^ tùy chọn này không phải là availavle trên linux - podarok
@podarok Nó có sẵn trên OpenSUSE 13.2 Linux. Hãy thử tìm phiên bản mới hơn của bản phân phối của bạn hoặc tự biên dịch phiên bản mới hơn của gói. - Aaron Digulla
Nó không hoạt động trên Ubuntu LTS (14.04). Đây là lần gần đây nhất)) - podarok
@ podarok Phiên bản nào của GNU coreutils? Của tôi là 8.24. - Aaron Digulla
Caching có thể là một thuật ngữ xấu. Tôi đã nghĩ về một cái gì đó như thực hiện trong cổng này superuser.com/a/597173/121352 nơi chúng tôi quét nội dung đĩa một lần vào bản đồ và sau đó tiếp tục sử dụng dữ liệu từ bản đồ đó thay vì nhấn lại vào đĩa. - Hennes


Lưu ý rằng bạn không thể so sánh các thư mục với du trên các hệ thống / máy khác nhau mà không chắc chắn, cả hai chia sẻ cùng một khối của hệ thống tập tin. Điều này có thể tính nếu bạn rsync một số tập tin từ một máy linux để một mũi và bạn muốn so sánh thư mục đồng bộ hóa của riêng bạn. Bạn có thể nhận được kết quả khác nhau với du vì các khối khác nhau ....


1
2017-10-05 15:36





Bạn cũng có thể muốn xem xdiskusage. Sẽ cung cấp cho bạn các thông tin tương tự, nhưng được hiển thị bằng đồ họa, cộng với cho phép đi sâu (rất hữu ích). Có những tiện ích tương tự khác cho KDE và thậm chí cả Windows.


0
2017-07-12 19:42





Bạn đã có thể sử dụng ls kết hợp với awk:

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

Đầu ra của ls được dẫn đến awk. awk bắt đầu xử lý dữ liệu. Dấu phân cách chuẩn là không gian. Biến tổng tot được khởi tạo bằng 0; câu lệnh sau được thực hiện cho mỗi hàng / dòng được xuất bởi ls. Nó chỉ tăng tot với kích thước. $5 viết tắt của cột thứ năm (được xuất bởi ls). Cuối cùng, chúng tôi chia cho (1024 * 1024) để tính bằng megabyte.

Nếu bạn chuyển đổi nó thành một tập lệnh hoặc hàm (.bashrc), bạn cũng có thể sử dụng nó để có được kích thước của các tập con nhất định của các thư mục, theo các kiểu tập tin.

Nếu bạn muốn có thông tin rộng về hệ thống, kdirstat có thể có ích!


0
2017-12-20 09:56



Tôi đồng ý người ta có thể mở rộng ví dụ này và làm các thủ thuật như nhận được kích thước của "tập con nhất định của thư mục, theo filetypes" vv .; nó có vẻ là một điểm khởi đầu tốt. Tuy nhiên giải pháp này là thiếu sót ngay từ đầu. Đối với mỗi người dùng muốn sử dụng phương pháp này, tôi khuyên bạn nên đọc câu trả lời và nhận xét câu hỏi này cũng như bài viết được liên kết ở đó. Tôi không nói rằng bạn không thể làm điều đó cả. Biết những hạn chế, đó là tất cả. - Kamil Maciorowski