Làm cách nào để xác định tổng kích thước của một thư mục (thư mục) từ dòng lệnh?


786

Có một lệnh đơn giản để hiển thị tổng kích thước tổng hợp (sử dụng đĩa) của tất cả các tệp trong một thư mục (thư mục) không?

Tôi đã thử những thứ này và họ không làm những gì tôi muốn:

  • ls -l, chỉ hiển thị kích thước của các tệp riêng lẻ trong một thư mục, cũng không
  • df -h, chỉ hiển thị không gian trống và được sử dụng trên các đĩa của tôi.



Nhắc nhở thân thiện rằng nó có thể có ý nghĩa gần như bằng không trên hệ thống tập tin CoW như BTRFS.
val

Câu trả lời:


1266

Lệnh du"tóm tắt việc sử dụng đĩa của từng TẬP TIN, đệ quy cho các thư mục", vd

du -hs /path/to/directory
  • -hlà để có được các số "con người có thể đọc được", ví dụ: lấy 140Mthay vì 143260(kích thước tính bằng KB)
  • -slà để tóm tắt (nếu không, bạn sẽ nhận được không chỉ kích thước của thư mục mà còn cho tất cả mọi thứ trong thư mục riêng biệt)

Khi bạn đang sử dụng, -hbạn có thể sắp xếp các giá trị có thể đọc được của con người bằng cách sử dụng

du -h | sort -h

Các -hcờ trên sortsẽ xem xét "human readable" giá trị kích thước.


Nếu muốn tránh liệt kê đệ quy tất cả các tệp và thư mục, bạn có thể cung cấp --max-depththam số để giới hạn số lượng mục được hiển thị. Phổ biến nhất,--max-depth=1

du -h --max-depth=1 /path/to/directory

9
tôn trọng để đi thêm dặm. :)
myusuf3

93
Tôi sử dụng du -shhoặc DOOSH như một cách để ghi nhớ nó (LƯU Ý: lệnh này giống nhau, chỉ là tổ chức các cờ dòng lệnh cho mục đích bộ nhớ)
Marco Ceppi

3
Có một tùy chọn hữu ích để gọi là kích thước --apparent. Nó có thể được sử dụng để tìm kích thước thực của tệp hoặc thư mục (trái ngược với dấu chân của nó trên đĩa), vd, tệp văn bản chỉ có 4 ký tự sẽ chiếm khoảng 6 byte, nhưng vẫn hiển thị dưới dạng ~ 4K trong một đầu ra du -sh thường xuyên. Tuy nhiên, nếu bạn vượt qua tùy chọn --apparent-size, đầu ra sẽ là 6. man du nói: - kích cỡ in rõ ràng kích thước in, thay vì sử dụng đĩa; mặc dù kích thước rõ ràng thường nhỏ hơn, nó có thể lớn hơn do các lỗ hổng trong các tệp ('thưa thớt'), phân mảnh bên trong, các khối gián tiếp
Hopping Bunny

4
Điều này cũng hoạt động cho OS X! Cảm ơn, tôi đã thực sự tìm cách để xóa các tệp, cả trên máy cục bộ và máy chủ của tôi, nhưng các phương thức tự động dường như không hoạt động. Vì vậy, tôi đã chạy du -hs *và đi vào thư mục lớn nhất và tìm ra những tập tin nào quá lớn ... Đây là một phương pháp tốt và điều tuyệt nhất là bạn không phải cài đặt bất cứ thứ gì! Chắc chắn xứng đáng với upvote của tôi
Dev

@BandaMuhammadAlHelal Tôi nghĩ có hai lý do: làm tròn số (làm tròn ducó phần kỳ dị, không hiển thị số thập phân nếu giá trị có nhiều hơn một chữ số trong đơn vị được chọn) và vấn đề tiền tố 1024 so với 1000 cổ điển . ducó một tùy chọn -B(hoặc --block-size) để thay đổi các đơn vị trong đó nó hiển thị các giá trị hoặc bạn có thể sử dụng -bthay vì -hđể lấy giá trị "thô" theo byte.
Marcel Promotionberg

164

Gần đây tôi đã tìm thấy một công cụ tương tác tuyệt vời, dựa trên, nhanh chóng cung cấp cho bạn một cái nhìn tổng quan về kích thước thư mục. Tìm kiếm loại công cụ đó trong nhiều năm.

  • truy vấn nhanh thông qua phân cấp tập tin
  • bạn có thể xóa ví dụ: các tệp tạm thời khổng lồ từ bên trong công cụ
  • cực nhanh

Hãy nghĩ về nó như baobab cho dòng lệnh:

apt-get install ncdu

11
Điều này là hoàn toàn tuyệt vời! Giống như DaisyDisk, cho OSX
subZero

3
ncdunó thật tuyệt! Sau khi cài đặt nó, chỉ cần làm điều này ncdu /. Bạn sẽ rất nhanh chóng tìm thấy các tập tin lớn nhất trên hệ thống. Cũng nhấn htrong khi bên trong giao diện điều khiển của ncdu. Nó có các phím tắt rất hữu ích
vlad-ardelean

Đây là chính xác những gì tôi cần: rất đơn giản, hiệu quả. Tình yêu thuần khiết.
dùng3790897

52

Điều này tìm kích thước đệ quy và đặt nó bên cạnh mỗi tên thư mục, cùng với tổng kích thước ở dưới cùng, tất cả ở định dạng con người

du -hsc *


10

tree là một lệnh hữu ích khác cho công việc này:

Chỉ cần cài đặt nó qua sudo apt-get install treevà gõ như sau:

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

Từ cây người :

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)

9

Dưới đây là những gì tôi đang sử dụng để in tổng số, thư mục và kích thước tệp:

$ du -sch /home/vivek/* | sort -rh

Chi tiết

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

Đầu ra

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

4

Các câu trả lời đã làm cho nó rõ ràng dulà công cụ để tìm tổng kích thước của một thư mục. Tuy nhiên, có một vài yếu tố cần xem xét:

  • Đôi khi, duđầu ra có thể gây hiểu nhầm vì nó báo cáo không gian được phân bổ bởi hệ thống tệp, có thể khác với tổng kích thước của các tệp riêng lẻ. Thông thường, hệ thống tệp sẽ phân bổ 4096 byte cho một tệp ngay cả khi bạn chỉ lưu trữ một ký tự trong đó!

  • Chênh lệch đầu ra do công suất 2 và công suất 10 đơn vị. Việc -hchuyển đổi để duchia số byte cho 2 ^ 10 (1024), 2 ^ 20 (1048576), v.v. để đưa ra một đầu ra có thể đọc được của con người. Nhiều người có thể quen với việc nhìn thấy sức mạnh của 10 (ví dụ 1K = 1000, 1M = 1000000) và ngạc nhiên với kết quả.

Để tìm tổng số kích thước của tất cả các tệp trong một thư mục, tính bằng byte, hãy:

find <dir> -ls | awk '{sum += $7} END {print sum}'

Thí dụ:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169

Find-ls-awk sẽ trả về giá trị sai cho các thư mục lớn # 1 . Đối với awk mới hơn, bạn có thể thêm --bignumhoặc -M; nếu đó không phải là một lựa chọn, hãy sử dụng find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc # 2 .
goozez

Nếu quyền hạn của 2 đang được sử dụng là một vấn đề, thì có --sitùy chọn: "như -h, nhưng sử dụng quyền hạn 1000 chứ không phải 1024"
muru

1

Để chỉ kích thước thư mục ở định dạng có thể đọc được, hãy sử dụng như sau:

du -hs directoryname

Điều này có thể không có trong phần chính xác, nhưng từ dòng lệnh, bạn có thể thử:

ls -sh filename

Các -slà kích thước, và -hlà con người có thể đọc được.

Sử dụng -lđể hiển thị trên lsdanh sách, như dưới đây:

ls -shl

0

du /foldernamelà lệnh tiêu chuẩn để biết kích thước của một thư mục. Cách tốt nhất là tìm các tùy chọn bằng cách đọc trang man:

man du

Bạn nên đọc trang man (có sẵn trực tuyến ) trước khi bạn sử dụng lệnh.


0

Đâ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


0

Nếu thư mục mong muốn của bạn có nhiều thư mục con thì hãy sử dụng như sau:

$ cd ~/your/target/directory
$ du -csh 

-c, --total tạo tổng cộng
-s, --summarize chỉ hiển thị tổng cộng cho mỗi đối số
-h, - kích thước in có thể đọc được của con người ở định dạng có thể đọc được (ví dụ: 1K 234M 2G)

mà sau đó sẽ tạo ra tổng số sử dụng bộ nhớ cho tất cả các tệp / thư mục trong thư mục hiện tại.


-1

Điều tốt nhất tôi nghĩ là như sau:

du -h directory_name | tail -n1

Điều này sẽ chỉ cho bạn kích thước của thư mục mà bạn quan tâm và sẽ không in kích thước của bất kỳ thư mục và tệp nào trong thư mục đó.

Tôi nên thêm rằng nếu kích thước của thư mục lớn thì du mất nhiều thời gian hơn. Bạn phải kiên nhẫn để lệnh này hoạt động. Cũng giống như bất kỳ lệnh unix nào khác, bạn có thể tìm ra tổng thời gian cho quá trình này bằng cách sử dụng timetrước lệnh này:

time du -h directory_name | tail -n1

6
ducó một tùy chọn cho việc này:-s
muru
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.