lấy kích thước gần đúng của thư mục (đệ quy bao gồm tất cả các tệp và thư mục con)


10

Có cách nào để nhanh chóng có được kích thước chính xác cho một thư mục (bao gồm, đệ quy, tất cả các thư mục con của nó) không? Tôi không muốn kích thước của các thư mục con, tôi chỉ có nghĩa là chúng nên được bao gồm đệ quy trong tổng kích thước được báo cáo.

Không, đó là một cách để có được một kích thước gần đúng? Tôi đang suy nghĩ điều gì đó dọc theo dòng dftạo ra phản hồi nhanh cho toàn bộ hệ thống tệp, nhưng lần này là cho một thư mục cụ thể (và đó là thư mục con).

Các giải pháp sử dụng dudường như mất nhiều thời gian khi được cung cấp một thư mục chứa hàng ngàn thư mục con.


Sử dụng dulà phương pháp duy nhất mà tôi biết. Vấn đề là dữ liệu được trải đều trong hệ thống phân cấp nên nó cần được kiểm tra bằng một công cụ để có được số đếm.
slm

Câu trả lời:


15

Tôi thấy điều này khá hữu ích.

du -sm Directory

hoặc để có được một sự cố của các thư mục bên trong

du -sm Directory/*

và sau đó với một loại nếu nó có nhiều subir

du -sm Directory/* | sort -n 

Lý do tôi sử dụng tùy chọn -m là để đảm bảo tôi có được đầu ra megabyte. Tôi thấy điều này dễ dàng hơn đối với tôi khi so sánh trực quan (khi tôi không nhận được hỗn hợp các đơn vị, ví dụ so sánh 999 KB và 1MB so với 999000MB và 1000000MB), lợi ích bổ sung là bạn có thể chuyển đầu ra thành sắp xếp.

Đặt tất cả trong nền và chuyển hướng đầu ra, sẽ mất thời gian cho bất kỳ phương thức nào người ta sử dụng, đó là một loạt các tệp sẽ mất thời gian.

du -sm Directory/* | sort -nr > ~/cacheDu.log &

Lưu ý các loại ngược vì vậy những người lớn là lúc đầu. Thêm phần này vào cron chạy mỗi n phút.

Sau đó, với một bí danh bí danh, bạn đã có một cách sử dụng thư mục khá cập nhật.

export alias ducache='head -n 15 ~/cacheDu.log'

@X Tian xem nhận xét của tôi về câu trả lời của glenn jackman
Marcus Junius Brutus

Được chấp nhận, đó là lý do tại sao tôi sử dụng -m và sắp xếp
X Tian

3
Hãy nhớ shopt -s dotglob, nếu không du -sm Directory/*sẽ không tính các tập tin / thư mục ẩn.
Dmitry Grigoryev

@XTian xin lỗi nhưng tôi không thể để một số lệnh xin vui lòng giúp đỡ.
Maveň

Tôi đã nhận được nó từ đây
Maveň

5
du -sh "$dir"

sẽ cung cấp cho bạn một bản tóm tắt về tổng kích thước trong đầu ra được định dạng "con người".


Vì bạn đang tìm kiếm một giải pháp thay thế du, tôi đã thử find, nhưng nó hoàn toàn giống nhau:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .

Cảm ơn, tôi biết điều đó nhưng dumất quá nhiều thời gian vì nó tạo ra kết quả chính xác. Tôi đã hy vọng cho một công cụ / lệnh cung cấp một câu trả lời gần đúng nhanh chóng.
Marcus Junius Brutus

dfnhưng nó hoạt động trên toàn bộ hệ thống tập tin.
glenn jackman

1

Bạn có thể không thích câu trả lời của tôi, nhưng tôi nghĩ cách tốt nhất để làm những gì bạn muốn là chạy "du -s" trong nền một cách thường xuyên bằng cách sử dụng cron và lưu trữ kết quả trong một tệp. Sau đó, khi bạn muốn một giá trị gần đúng, sử dụng giá trị từ tệp. Bạn có thể quyết định tần suất chạy du. Tôi không thấy một cách nhanh hơn để nhận được giá trị. Lệnh du là hiệu quả cho những gì nó làm.

Cách khác duy nhất bạn có thể làm điều này rất nhanh là tạo một hệ thống tập tin cho thư mục, sau đó df sẽ giúp bạn có câu trả lời bạn muốn rất nhanh.

Nếu nhanh hơn để biết mọi thứ trong hệ thống tệp ngoại trừ thư mục của bạn, bạn có thể chạy df cho hệ thống tệp, du cho mọi thứ khác ngoài thư mục của bạn và trừ đi.


0

Nó không chính xác phù hợp với nhu cầu của bạn (không phải in một dòng) nhưng cách dễ dàng hơn các giải pháp khác:

du -a -h | sort -hr | head -2

Lệnh này sẽ cung cấp cho bạn kích thước của thư mục và thư mục con và kích thước của tệp lớn nhất hoặc thư mục con trên thư mục hiện tại.

PS: Trong head -2trường hợp một thư mục con chiếm toàn bộ vị trí của thư mục hiện tại và lắng nghe trước hiện tại.

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.