Làm thế nào để tôi có được kích thước của một thư mục trên dòng lệnh?


1066

Tôi đã cố gắng để có được kích thước của một thư mục (chứa các thư mục và thư mục con) bằng cách sử dụng lslệnh với tùy chọn l. Nó dường như hoạt động cho các tệp ( ls -l file name), nhưng nếu tôi cố gắng lấy kích thước của một thư mục (ví dụ, ls -l /home), tôi chỉ nhận được 4096 byte, mặc dù hoàn toàn lớn hơn nhiều.


18
1) Nói đúng ra, bạn không thể. Linux có thư mục, không phải thư mục. 2) Có sự khác biệt giữa kích thước của một thư mục (là một tệp đặc biệt chứa các nút trỏ đến các tệp khác) và kích thước của nội dung của thư mục đó. Như những người khác đã chỉ ra, lệnh du cung cấp cái sau, đó là những gì nó xuất hiện mà bạn muốn.
jamesqf

11
vì bạn có vẻ là người mới, tôi sẽ chỉ ra -htùy chọn hữu ích mà bạn có thể thêm vào -ltùy chọn (nghĩa là ls -lh) để có được kích thước tệp được in ra trong ký hiệu thân thiện với con người như 1.1M thay vì 1130301. "h "Trong du -hslệnh mà @sam đưa ra làm câu trả lời cho câu hỏi của bạn về các thư mục cũng có nghĩa là" con người có thể đọc được ", và nó cũng xuất hiện trong df -hđó cho thấy lượng không gian có thể đọc được của con người trên đĩa.
msouth 20/2/2015

Câu trả lời:


1490

du -sh file_path

Giải trình

  • du( d isc u sage) lệnh ước tính sử dụng không gian file_path
  • Các tùy chọn -shlà (từ man du):

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    Để kiểm tra nhiều hơn một thư mục và xem tổng số, sử dụng du -sch:

      -c, --total
             produce a grand total
    

44
... trừ khi bạn có liên kết cứng ;-) stackoverflow.com/questions/19951883/
Kẻ

15
Đây là loại câu trả lời mà tôi yêu thích <3 Nó được tóm tắt và một loại giới thiệu về lệnh duvà bạn cũng đưa ra cách để tìm kiếm thêm chi tiết man du...

Gợi ý cho các nhà sản xuất giống Unix: Lần tới, chỉ cần thực hiện lệnh "đĩa" trước hoặc thậm chí là "sử dụng đĩa" ... sau đó là phím tắt ...;)
jave.web

Nó hoạt động rất tốt với find ví dụ để đếm lượng không gian trong các thư mục con cụ thể trong đường dẫn hiện tại: $ find . -type d -name "node_modules" -prune -exec du -sh {} \;
Alex Glukhovtsev

321

Chỉ cần sử dụng dulệnh:

du -sh -- *

sẽ cung cấp cho bạn việc sử dụng đĩa tích lũy của tất cả các thư mục không bị ẩn, các tệp vv trong thư mục hiện tại ở định dạng có thể đọc được.

Bạn có thể sử dụng dflệnh để biết không gian trống trong hệ thống tệp có chứa thư mục:

df -h .

4
du -sh *bắt đầu ném các lỗi "tùy chọn không xác định" nếu bất kỳ tệp nào trong thư mục đó bắt đầu bằng dấu gạch ngang. An toàn hơn để làmdu -sh -- *
bắt đầu

1
du -sh *không hiển thị mức sử dụng bộ nhớ của các thư mục ẩn
Prashant Mitchhakar Singh

4
du -sh -- * .*để bao gồm các dotfiles. Điều này rất hữu ích để bao gồm một .gitthư mục lớn có thể , ví dụ. Ngoài ra, trong zsh, bạn có thể setopt globdotstruy cập dotfiles theo mặc định.
cbarrick

1
Làm gì --? Tôi biết nó áp dụng cho shell dựng sẵn để kết thúc các đối số tùy chọn, nhưng dukhông phải là tích hợp sẵn và tôi không thấy cách sử dụng này được ghi lại cho du: linux.die.net/man/1/du
Flow2k

Đôi khi bạn sẽ muốn thêm -b( --apparent-size)
elig

196

dulà bạn của bạn. Nếu bạn chỉ muốn biết tổng kích thước của một thư mục thì hãy nhảy vào đó và chạy:

du -hs

Nếu bạn cũng muốn biết thư mục con nào chiếm bao nhiêu dung lượng đĩa?! Bạn có thể mở rộng lệnh này thành:

du -h --max-depth=1 | sort -hr

sẽ cung cấp cho bạn kích thước của tất cả các thư mục con (cấp 1). Đầu ra sẽ được sắp xếp (thư mục lớn nhất trên cùng).


Có vẻ như trên một số phiên bản (có lẽ cũ hơn?) Của linux, sort không có công tắc h, và do đó, lệnh tốt nhất tiếp theo tôi có thể tìm thấy là: du -c --max-height = 1 | sắp xếp -rn
richhallstoke

@richhallstoke nếu bạn sử dụng ncducác tệp được sắp xếp theo kích thước giảm dần theo mặc định.
Armfoot

3
+1 cho "| sort -hr"
afranques 16/03/18

67

ducó thể phức tạp để sử dụng vì bạn phải vượt qua 100 đối số để có đầu ra tốt. Và việc tìm ra kích thước của các thư mục ẩn thậm chí còn khó khăn hơn.

Làm cho cuộc sống của bạn dễ dàng và sử dụngncdu .

ncdu

Bạn nhận được mỗi bản tóm tắt thư mục có thể dễ dàng duyệt.


9
Đây phải là câu trả lời chính xác, ít nhất là cho những người có thể cài đặt phần mềm trên hệ thống. Thật không may, tôi không nghĩ rằng hầu hết mọi người sẽ cuộn xuống đủ xa để thấy điều này.
DavidR

@ RickyNotaro-Garcia Nope, điều này bỏ qua các đối tượng ẩn và treo trên các thư mục lớn. Có thể có một giải pháp OK với hàng tá đường ống, nhưng tại sao lại lãng phí cuộc sống của bạn.
Teque5

@ RickyNotaro-Garcia Đọc toàn bộ nhận xét của tôi: nỗ lực của bạn bỏ qua các đối tượng ẩn và treo trên các thư mục lớn.
Teque5

2
ncdulà tuyệt vời, tôi luôn luôn tìm kiếm lệnh này khi quên. Thật nhanh chóng, dễ dàng điều hướng và giúp tìm các thư mục lớn một cách dễ dàng. FYI, nó cũng có sẵn cho macOS và có lẽ là tất cả các máy linux.
Lukas

..và bạn có thể xóa các thư mục trực tiếp ncdubằng cách nhấn dphím
ccpizza

32

Những người khác đã đề cập du, nhưng tôi cũng muốn đề cập đến Ncdu - đây là phiên bản của ncurses duvà cung cấp tính tương tác: Bạn có thể khám phá phân cấp thư mục trực tiếp và xem kích thước của các thư mục con.


26

Các dulệnh cho thấy việc sử dụng đĩa của tập tin.

Các -htùy chọn cho thấy kết quả trong hình dạng con người có thể đọc được (ví dụ, 4k, 5M, 3G).

du -h (file name)

22

Tất cả các ví dụ trên sẽ cho bạn biết kích thước của dữ liệu trên đĩa (tức là dung lượng ổ đĩa mà một tệp cụ thể đang sử dụng, thường lớn hơn kích thước tệp thực tế). Có một số tình huống trong đó sẽ không cung cấp cho bạn một báo cáo chính xác, nếu dữ liệu không thực sự được lưu trữ trên đĩa cụ thể này và chỉ tồn tại các tham chiếu inode.

Trong ví dụ của bạn, bạn đã sử dụng ls -l trên một tệp duy nhất, tệp này sẽ trả về kích thước thực của tệp, KHÔNG phải kích thước của nó trên đĩa.

Nếu bạn muốn biết kích thước tệp thực tế, hãy thêm tùy chọn -b vào du.

du -csbh .

Đúng. Tôi đang sử dụng sdfs để nén và trích xuất các tệp, vì vậy tôi không thể hiểu tại sao nó lại báo cáo số lượng thấp như vậy. Kích thước thực tế của các tệp có ls có thể được tìm thấy bằng cách sử dụng: du -b
Ryan Shillington

15

cá nhân tôi nghĩ rằng điều này là tốt nhất, nếu bạn không muốn sử dụng ncdu

# du -sh ./*

14
df -h .; du -sh -- * | sort -hr

Điều này cho thấy dung lượng đĩa bạn còn lại trên ổ đĩa hiện tại và sau đó cho bạn biết mỗi tệp / thư mục chiếm bao nhiêu. ví dụ,

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json

FYI, nó dường như báo cáo kích thước trên đĩa. tức là, nó có thể sẽ được đệm vào 4KB gần nhất.
mở


9

tìm tất cả các tệp trong thư mục hiện tại theo cách đệ quy và tổng hợp kích thước của chúng:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'

Tôi sẽ sử dụng -not -type dđể tổng hợp không chỉ kích thước của các tệp thông thường ( -type f) mà cả kích thước của các liên kết tượng trưng, ​​v.v.
anton_rh

Điều này thật tuyệt vời, vì bạn không nhận được chi phí cần thiết để lưu trữ các tệp mà chỉ có kích thước của các tệp.
bballdave025

9

Đây là một hàm cho .bash_aliases của bạn

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

đầu ra mẫu:

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

cho các thư mục con:

$ dusort .
$ dusort /var/log/


6

Lưu ý rằng duin không gian mà thư mục chiếm trên phương tiện thường lớn hơn tổng kích thước của tất cả các tệp trong thư mục, vì dutính đến kích thước của tất cả thông tin phụ được lưu trữ trên phương tiện để sắp xếp thư mục tuân thủ với định dạng hệ thống tập tin.

Nếu hệ thống tệp ducó thể nén được, thì có thể xuất số lượng nhỏ hơn tổng kích thước của tất cả các tệp, vì các tệp có thể được nén bởi hệ thống tệp và do đó chúng chiếm ít không gian trên phương tiện hơn là thông tin không nén mà chúng chứa. Tương tự nếu có các tệp thưa thớt.

nếu có các liên kết cứng trong thư mục, thì ducũng có thể in giá trị nhỏ hơn vì một số tệp khác nhau trong thư mục tham chiếu cùng một dữ liệu trên phương tiện truyền thông.

Để có được tổng kích thước đơn giản của tất cả các tệp trong thư mục, có thể sử dụng biểu thức shell một dòng sau (giả sử hệ thống GNU):

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

hoặc thậm chí ngắn hơn:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

Nó chỉ tính tổng kích thước của tất cả các tệp không phải thư mục trong thư mục (và các thư mục con của nó theo cách đệ quy) từng cái một. Lưu ý rằng đối với các liên kết tượng trưng, ​​nó báo cáo kích thước của liên kết tượng trưng (không phải của tệp mà liên kết tượng trưng trỏ đến).


5

Bạn có thể dùng

du -sh directory/

du -sh filename

để biết không gian bị chiếm bởi thư mục hoặc tập tin.

df -h

sẽ hiển thị việc sử dụng đĩa ở định dạng có thể đọc được của con người -h làm điều đó.

Ngoài ra còn có một chương trình dựa trên gui được gọi là Disk Usage Analyzer.


5

Đây là tập lệnh POSIX sẽ hoạt động với:

  • Một tập tin
  • Các tập tin
  • Một thư mục
  • Thư mục
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

Nguồn

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.