Làm cách nào để có được kích thước của thư mục Linux hoặc Mac OS X từ dòng lệnh? [bản sao]


74

Câu hỏi này đã có câu trả lời ở đây:

Tôi sử dụng lệnh nào để tìm kích thước của tất cả các tệp (đệ quy) trong thư mục Linux hoặc Mac OS X?


2
bạn có thể sử dụng -ktùy chọn để sử dụng kích thước khối 1K byte
Zoker

Tôi chỉ muốn giới thiệu phần mềm miễn phí này có tên Disk Inventory X. tải xuống tại đây derlien.com sử dụng đơn giản cho mac osx
Nimitack

Thay vì du, tôi sử dụng ncdu, bạn có thể tìm tài liệu tham khảo tại đây, remysharp.com/2018/08/23/cli-improved
Alan Dong

Câu trả lời:


82

Phiên bản BSD duđược sử dụng trong OS X báo cáo kích thước với các khối 512 byte - các kích thước về cơ bản được làm tròn đến giá trị 512 byte tiếp theo. Điều này cho bạn biết không gian trên đĩa, lớn hơn lượng dữ liệu. Nếu bạn có nhiều tệp nhỏ, sự khác biệt có thể lớn.

Đây là một ví dụ.

Đây là giá trị với thường xuyên du. Đó là trong các khối 512 byte:

$ du -s
248   .

Các -hkết quả cờ trong một số dễ đọc hơn, bằng kilobyte. Như mong đợi, nó chỉ bằng một nửa số khối 512 byte:

$ du -hs
124K  .

Cuối cùng, bạn có thể sử dụng findawkcung cấp cho bạn tổng số byte thực tế trong các tệp. Đây là loại chậm, nhưng nó hoạt động:

$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527

Giá trị này khớp chính xác với số được báo cáo bởi cửa sổ Nhận thông tin của Finder. (Không có dĩa hoặc xattrs lạ nào trong tập hợp tệp này.) Nó nhỏ hơn đáng kể so với giá trị được báo cáo du.

Đây là cách nó hoạt động: nó nhận được một danh sách tất cả các tệp và chuyển chúng đến ls -l; sau đó awkđược sử dụng để đếm các byte. Các -type flá cờ là có để chỉ file (và không phải thư mục) được gửi đến ls. Không có cờ đó, nó cũng sẽ gửi tên thư mục tới lsvà mỗi tệp sẽ được liệt kê hai lần: một lần dưới dạng tệp riêng lẻ và một lần dưới dạng một mục trong thư mục.

Phiên bản GNU ducó thể đưa ra các giá trị theo byte thực tế thay vì các khối. Thật không may là phiên bản BSD dukhông linh hoạt.


Giải thích tuyệt vời. Thật thú vị khi sử dụng dutừ lõi GNU với -btùy chọn tôi nhận được kết quả khác với findđường ống của bạn . Đối với thư mục 36 GB, tôi nhận được chênh lệch 82 KB.
Stefan Schmidt

Có cách nào để in nó ra ở định dạng dễ đọc hơn không?
anon58192932

75

Hiển thị kích thước của một tập tin

du -h path_to_a_file

Hiển thị kích thước của nội dung của một thư mục, mỗi thư mục con và từng tệp riêng lẻ:

du -h path_to_a_directory

Hiển thị kích thước của nội dung của một thư mục:

du -sh path_to_a_directory


25
du -schnếu bạn muốn một cái gì đó dễ đọc hơn
Joey

@Johannes, tôi đoán bạn nên đăng bình luận này như một câu trả lời, để nó có thể được chấp nhận?
Arjan

Tôi tìm thấy tùy chọn -c dự phòng (ít nhất là trên Mac OS X) và du -sh thay thế các tổng phụ.
Daryl Spitzer

Aha, tôi không biết người ta có thể chấp nhận câu trả lời của chính mình. Bây giờ ít nhất mọi người biết câu hỏi được giải quyết.
Arjan

Tôi sẽ vui vẻ chấp nhận một câu trả lời mới đó là một cải tiến của tôi.
Daryl Spitzer

9

du - cho biết đĩa sử dụng không phải kích thước tập tin .

find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=$1} END {print b}'

trên mã thiết bị đầu cuối (im trên osx 10.6) cung cấp cho tôi kết quả tốt nhất và nhanh hơn so với "tìm ... -exec"

điểm chuẩn nhanh

time find . -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}'
4744010970

real    0m0.086s
user    0m0.029s
sys 0m0.073s

time find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
4744010970

real    0m18.515s
user    0m2.929s
sys 0m9.339s

Nếu bạn muốn làm điều tương tự trên Ubuntu:find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}'
Rodrigo Polo

Có cách nào để có được kết quả này ở định dạng có thể đọc được không?
anon58192932

6

Bạn có thể sử dụng du -ah .hiển thị kích thước của tất cả các tệp và thư mục theo cách đệ quy.

Điều này có thể được kết hợp với sort, vì vậy bạn sẽ thấy 20 thư mục lớn nhất trong thư mục hiện tại:

du -ah . | sort -rh | head -20

Lưu ý: Tùy chọn -hcho sortkhông khả dụng trên OSX / BSD, vì vậy bạn phải cài đặt sorttừ coreutils(ví dụ: qua brew) và áp dụng đường dẫn bin tới PATH, vd

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

Nếu không sử dụng:

du -a . | sort -rn | head -20

Lệnh đầu tiên không hoạt động trên macOS 10.12.1 #du -ah của tôi. | sắp xếp -rh | head -20 sort: tùy chọn không hợp lệ - h Hãy thử `sort --help 'để biết thêm thông tin.
nucleotux

3
@nucletux Kiểm tra ghi chú bên dưới lệnh. Điều này hoạt động trong sắp xếp GNU mà bạn có thể cài đặt trên macOS thông qua : brew install coreutils, nếu không thì sử dụng lệnh sắp xếp BSD ở cuối mà không có -h.
kenorb

2

Tôi đã kết hợp tất cả các ứng dụng của bạn và kết hợp nó với đầu ra có thể đọc được của con người, kết quả là:

#!/bin/sh
find $1 -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}' | awk '{ sum=$1 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'

Liên kết với ý chính: https://gist.github.com/miticnhausen/9365461

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.