Làm cách nào để sắp xếp đầu ra du -h theo kích thước


966

Tôi cần phải có được một danh sách đầu ra du người có thể đọc được.

Tuy nhiên, dukhông có tùy chọn "sắp xếp theo kích thước" và đường ống sortkhông hoạt động với cờ có thể đọc được của con người.

Ví dụ: đang chạy:

du | sort -n -r 

Xuất ra mức sử dụng đĩa được sắp xếp theo kích thước (giảm dần):

du |sort -n -r
65108   .
61508   ./dir3
2056    ./dir4
1032    ./dir1
508     ./dir2

Tuy nhiên, chạy nó với cờ người có thể đọc được, không sắp xếp đúng:

du -h | sort -n -r

508K    ./dir2
64M     .
61M     ./dir3
2.1M    ./dir4
1.1M    ./dir1

Có ai biết một cách để sắp xếp du -h theo kích thước?


Heh ... Buồn cười bạn nên hỏi, vì điều này đã gây khó chịu cho tôi ... ít nhất là hơn một năm. Tuần trước tôi đã tải mã xuống GNU coreutils (trong đó sắp xếp là một phần) và đã xem, nhưng quyết định sẽ mất nhiều thời gian hơn tôi có trong tay để vá ... Bất cứ ai? :)
thư giãn

Đây là một câu hỏi liên quan nhiều: serverfault.com/q/737537/35034
cregox

Bạn có xem thử cái này chưa? unix.stackexchange.com/questions/4681/ Từ Nó là một bản sao gần như và có giá trị vàng. Bạn làm bình thường dunhưng thêm -h vào sortlệnh. Bạn có thể thêm -rhsao cho lớn nhất là đầu tiên trong tệp, nếu không bạn cần tailphải xem các khoảng trống.
SDsolar

Tôi không mong đợi một câu hỏi như vậy sẽ trở nên phổ biến khi tôi googled này.
Mateen Ulhaq

Câu trả lời:


1362

Kể từ GNU coreutils 7.5 được phát hành vào tháng 8 năm 2009, sortcho phép một -htham số, cho phép các hậu tố số của loại được tạo bởi du -h:

du -hs * | sort -h

Nếu bạn đang sử dụng một loại không hỗ trợ -h, bạn có thể cài đặt GNU Coreutils. Ví dụ: trên Mac OS X cũ hơn:

brew install coreutils
du -hs * | gsort -h

Từ sort hướng dẫn :

-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)


3
Phần có liên quan của hướng dẫn sử dụng: gnu.org/software/coreutils/manual/ Kẻ
wodow

29
Dễ dàng cài đặt trên OS X với homebrew - brew install coreutils.
Richard Poirier

41
Tốt một! Cá nhân tôi luôn luôn làm du -BM | sort -nrnhư một cách giải quyết - nó đủ để con người có thể đọc được và nó được sắp xếp, nếu bất cứ ai bị mắc kẹt với lõi cũ.
chutz

30
Nếu sử dụng trên OSX qua Homebrew, lưu ý rằng bây giờ bạn sẽ cần sử dụng gsort thay vì sắp xếp:du -hs * | gsort -h
Brian Cline

2
@PaulDraper, du -BMin mọi thứ bằng megabyte, do đó, tệp 168K thực sự sẽ hiển thị là 0M. Trừ khi có một số khác biệt về phiên bản khác mà tôi không biết. Phiên bản của tôi duchỉ hiển thị giá trị megabyte số nguyên.
chutz

88
du | sort -nr | cut -f2- | xargs du -hs

48
Và nó sẽ làm một số lượng lớn nhân đôi đếm.
Douglas Leeder

1
Đầu tiên, nó thực hiện du bình thường - sau đó cho mỗi mục, nó tính toán lại kích thước chỉ để in nó ở dạng người có thể đọc được.
Douglas Leeder

8
@Doumund Leeder: bạn đúng khi đếm trùng lặp, nhưng nghĩ rằng du thứ hai không bắt đầu từ bộ đệm lạnh (nhờ hệ điều hành) @hasen j: xargs là một lệnh rất hữu ích, nó tách stdin của nó và cung cấp nó làm đối số theo lệnh đã cho
cadrian

4
Chris's thực sự vượt trội vì nó hoạt động với các đường dẫn chứa khoảng trắng. Ném một phiếu bầu theo cách của bạn, bạn thân.
rbright

3
Xấu xí, nhưng đa nền tảng :).
voretaq7

62

@Doumund Leeder, một câu trả lời nữa: Sắp xếp đầu ra có thể đọc được của con người từ du -h bằng cách sử dụng một công cụ khác. Giống như Perl!

du -h | perl -e 'sub h{%h=(K=>10,M=>20,G=>30);($n,$u)=shift=~/([0-9.]+)(\D)/;
return $n*2**$h{$u}}print sort{h($b)<=>h($a)}<>;'

Chia thành hai dòng để phù hợp với màn hình. Bạn có thể sử dụng nó theo cách này hoặc biến nó thành một lớp lót, nó sẽ hoạt động theo cách khác.

Đầu ra:

4.5M    .
3.7M    ./colors
372K    ./plugin
128K    ./autoload
100K    ./doc
100K    ./syntax

EDIT: Sau một vài vòng golf tại PerlMonks , kết quả cuối cùng là như sau:

perl -e'%h=map{/.\s/;99**(ord$&&7)-$`,$_}`du -h`;die@h{sort%h}'

2
Phiên bản ngắn của bạn xuất ra stderrdiebạn có thể thay đổi nó để làm cho nó xuất ra stdoutkhông?
Dennis Williamson

2
Thay đổi diethành a printvà nó sẽ đi đến stdout. Đó chỉ là hai nhân vật nữa.
Adam Bellaire

hoạt động trên Ubuntu!
marinara

hack hack perl ấn tượng
nandoP

Kết quả là theo thứ tự ngược lại :(
RSFalcon7

55

Có một công cụ vô cùng hữu ích mà tôi sử dụng được gọi là ncdu , được thiết kế để tìm các thư mục và tệp sử dụng đĩa cao phiền phức đó và xóa chúng. Đó là giao diện điều khiển, nhanh và nhẹ và có các gói trên tất cả các bản phân phối chính.


Rất đẹp ... Tôi tự hỏi liệu kết quả có thể được đưa ra theo tiêu chuẩn không ... Tôi lười đến mức không thể đọc được hướng dẫn
ojblass

8
gt5 nằm trong cùng một tĩnh mạch; tính năng sát thủ của nó đang hiển thị tăng trưởng.
Tobu

1
Điều đó thật tuyệt! Và nhanh hơn nhiều so với treo xung quanh du, nếu bạn chỉ muốn xác định các thư mục lớn.
BurninLeo

44
du -k * | sort -nr | cut -f2 | xargs -d '\n' du -sh

Không thể sử dụng với du -k --total, đưa ra lỗi ở cuốidu: cannot access 'total': No such file or directory
laggingreflex

tôi thích cái này hơn bất kỳ câu trả lời nào khác Làm thế nào bạn sẽ chỉ hiển thị 50 kết quả đầu tiên?
Mậu

1
@Mauro - chỉ cần đưa kết quả vào headbằng cách thêm `| đầu -50` ở cuối.
Samuel Lelièvre

21

Theo như tôi có thể thấy bạn có ba lựa chọn:

  1. Thay đổi duđể sắp xếp trước khi hiển thị.
  2. Thay đổi sortđể hỗ trợ kích thước của con người để sắp xếp số.
  3. Đăng quá trình đầu ra từ sắp xếp để thay đổi đầu ra cơ bản để con người có thể đọc được.

Bạn cũng có thể làm du -kvà sống với kích thước trong KiB.

Đối với tùy chọn 3, bạn có thể sử dụng tập lệnh sau:

#!/usr/bin/env python

import sys
import re

sizeRe = re.compile(r"^(\d+)(.*)$")

for line in sys.stdin.readlines():
    mo = sizeRe.match(line)
    if mo:
        size = int(mo.group(1))
        if size < 1024:
            size = str(size)+"K"
        elif size < 1024 ** 2:
            size = str(size/1024)+"M"
        else:
            size = str(size/(1024 ** 2))+"G"

        print "%s%s"%(size,mo.group(2))
    else:
        print line

20

Tôi cũng gặp vấn đề đó và tôi hiện đang sử dụng một cách giải quyết:

du -scBM | sort -n

Điều này sẽ không tạo ra các giá trị tỷ lệ, nhưng luôn tạo ra kích thước tính bằng megabyte. Điều đó ít hoàn hảo hơn, nhưng đối với tôi nó tốt hơn là không có gì (hoặc hiển thị kích thước theo byte).


Tôi thích công tắc -BM, về cơ bản giống như -m, nhưng nó có lợi thế là hiển thị kích thước và M được đặt trước nó, vì vậy bạn nhận được 10M rõ ràng hơn chỉ 10 :)
Tom Feiner

Đây là giải pháp đơn giản nhất tôi từng thấy cho đến nay trên trang này, cảm ơn bạn!
Jeff Olson

19

Tìm thấy bài đăng này ở nơi khác. Do đó, kịch bản shell này sẽ làm những gì bạn muốn mà không cần gọi dumọi thứ hai lần. Nó sử dụng awkđể chuyển đổi các byte thô thành định dạng có thể đọc được. Tất nhiên, định dạng hơi khác nhau (mọi thứ được in chính xác đến một chữ số thập phân).

#/bin/bash
du -B1 | sort -nr  |awk '{sum=$1;
hum[1024**3]="G";hum[1024**2]="M";hum[1024]="K";
for (x=1024**3; x>=1024; x/=1024){
        if (sum>=x) { printf "%.1f%s\t\t",sum/x,hum[x];print $2;break
}}}'

Chạy này trong .vimthư mục của tôi mang lại:

4.4M            .
3.6M            ./colors
372.0K          ./plugin
128.0K          ./autoload
100.0K          ./syntax
100.0K          ./doc

(Tôi hy vọng 3,6 triệu phối màu không quá mức.)


1
Tôi cũng có câu trả lời Perl, nhưng tôi nghĩ nó có thể khiến mọi người ghét tôi: du -B1 | sắp xếp -nr | perl -e '% h = (0 => b, 1 => K, 2 => M, 3 => G); for (<>) {($ s, @ f) = split / \ s + /; $ e = 3; $ e-- while (1024 ** $ e> $ s); $ v = ($ s / (1024 ** $ e)); printf "% -8s% s \ n", sprintf ($ v> = 100 "% d% s": "% .1f% s", $ s / (1024 ** $ e), $ h {$ e}), @ f;} '
Adam Bellaire

Mặc dù câu trả lời Perl thực sự cho định dạng của nó gần hơn với du. Mặc dù việc làm tròn đã tắt ... Có vẻ như du luôn đưa ra trần () chứ không phải vòng ()
Adam Bellaire

Hey, tại sao tôi sử dụng một hàm băm ở đó? Đáng lẽ phải là một mảng ... càu nhàu buổi sáng ....
Adam Bellaire

Đã thêm một giải pháp Perl tốt hơn như một câu trả lời khác.
Adam Bellaire

Cả hai phiên bản đều thất bại khi tên tệp chứa khoảng trắng
Vi.

15

Phiên bản này sử dụng awkđể tạo các cột bổ sung cho các phím sắp xếp. Nó chỉ gọi dumột lần. Đầu ra sẽ trông chính xác như thế du.

Tôi đã chia nó thành nhiều dòng, nhưng nó có thể được kết hợp lại thành một lớp.

du -h |
  awk '{printf "%s %08.2f\t%s\n", 
    index("KMG", substr($1, length($1))),
    substr($1, 0, length($1)-1), $0}' |
  sort -r | cut -f2,3

Giải trình:

  • BEGIN - tạo một chuỗi để lập chỉ mục để thay thế 1, 2, 3 cho K, M, G để nhóm theo đơn vị, nếu không có đơn vị nào (kích thước nhỏ hơn 1K), thì không có kết quả khớp nào và số 0 được trả về (hoàn hảo! )
  • in các trường mới - đơn vị, giá trị (để làm cho sắp xếp alpha hoạt động chính xác, đó là phần không đệm, độ dài cố định) và dòng gốc
  • lập chỉ mục ký tự cuối cùng của trường kích thước
  • kéo ra phần số của kích thước
  • sắp xếp kết quả, loại bỏ các cột thêm

Hãy thử nó mà không có cutlệnh để xem những gì nó đang làm.

Đây là phiên bản sắp xếp trong tập lệnh AWK và không cần cut:

du -h |
   awk '{idx = sprintf("%s %08.2f %s", 
         index("KMG", substr($1, length($1))),
         substr($1, 0, length($1)-1), $0);
         lines[idx] = $0}
    END {c = asorti(lines, sorted);
         for (i = c; i >= 1; i--)
           print lines[sorted[i]]}'

cảm ơn bạn! đây là ví dụ đầu tiên hoạt động với tôi trong OS X 10.6, không tính các tập lệnh perl / phython-scripts. và cảm ơn một lần nữa cho lời giải thích tốt. luôn luôn tốt đẹp để học một cái gì đó mới. awk chắc chắn là một công cụ mạnh mẽ.
Sói

Cảm ơn rất nhiều vì điều đó. Tôi đã thay đổi du để du -sh *chỉ hiển thị các tập tin và thư mục ngay lập tức mà không cần đệ quy.
HankCa

15

Dưới đây là một ví dụ cho thấy các thư mục ở dạng tóm tắt nhỏ gọn hơn. Nó xử lý không gian trong thư mục / tên tệp.

% du -s * | sort -rn | cut -f2- | xargs -d "\n" du -sh

53G  projects
21G  Desktop
7.2G VirtualBox VMs
3.7G db
3.3G SparkleShare
2.2G Dropbox
272M apps
47M  incoming
14M  bin
5.7M rpmbuild
68K  vimdir.tgz

1
Người dùng macOS / OSX được cảnh báo rằng phiên bản mac của xargs không hỗ trợ cờ -d và nếu bạn bỏ qua nó, bất kỳ thư mục nào chứa một khoảng trắng đều được phân tách riêng biệt, tất nhiên sẽ thất bại.
jasonology

11

sắp xếp tệp theo kích thước tính bằng MB

du --block-size=MiB --max-depth=1 path | sort -n

9

Tôi có một trình bao bọc python đơn giản nhưng hữu ích cho du gọi là dutop . Lưu ý rằng chúng tôi (những người duy trì coreutils) đang xem xét thêm chức năng để sắp xếp để sắp xếp trực tiếp đầu ra "con người".


1
+1 cho một trong những trường hợp ngoại lệ hiếm hoi, hợp lệ để "làm một việc và làm đúng". Trừ khi có ai đó sắp xếp để hiểu tiền tố SI và / hoặc tiền tố nhị phân.
Joachim Sauer

Và như ptman đề cập dưới đây: ta da ! ( sortcờ mới )
Tobu

9

Có một cái khác:

$ du -B1 | sort -nr | perl -MNumber::Bytes::Human=format_bytes -F'\t' -lane 'print format_bytes($F[0])."\t".$F[1]'

Tôi bắt đầu thích perl. Bạn có thể phải làm một

$ cpan Number::Bytes::Human

Đầu tiên. Đối với tất cả các tin tặc perl ngoài kia: Có, tôi biết rằng phần sắp xếp cũng có thể được thực hiện trong perl. Có lẽ là phần du, quá.


8

Đoạn trích này không biết xấu hổ được lấy từ 'Jean-Pierre' từ http://www.unix.com/shell-programming-scripting/32555-du-h-sort.html . Có cách nào tôi có thể tín dụng anh ta tốt hơn?

du -k | sort -nr | awk '
     BEGIN {
        split("KB,MB,GB,TB", Units, ",");
     }
     {
        u = 1;
        while ($1 >= 1024) {
           $1 = $1 / 1024;
           u += 1
        }
        $1 = sprintf("%.1f %s", $1, Units[u]);
        print $0;
     }
    '

Tôi nghĩ rằng nếu đó là một con số rất lớn, thì đơn vị đã biến mất và con số hiển thị là nhỏ ... hãy thử23423423432423
nopole

7

Sử dụng cờ "-g"

 -g, --general-numeric-sort
              compare according to general numerical value

Và trên thư mục / usr / local của tôi tạo ra kết quả như thế này:

$ du |sort -g

0   ./lib/site_ruby/1.8/rubygems/digest
20  ./lib/site_ruby/1.8/rubygems/ext
20  ./share/xml
24  ./lib/perl
24  ./share/sgml
44  ./lib/site_ruby/1.8/rubygems/package
44  ./share/mime
52  ./share/icons/hicolor
56  ./share/icons
112 ./share/perl/5.10.0/YAML
132 ./lib/site_ruby/1.8/rubygems/commands
132 ./share/man/man3
136 ./share/man
156 ./share/perl/5.10.0
160 ./share/perl
488 ./share
560 ./lib/site_ruby/1.8/rubygems
604 ./lib/site_ruby/1.8
608 ./lib/site_ruby

4
Tuy nhiên, điều đó không mang lại đầu ra dễ đọc cho con người, đó là điều mà OP đang tìm kiếm.

4

Một số khác:

du -h | perl -e'
@l{ K, M, G } = ( 1 .. 3 );
print sort {
    ($aa) = $a =~ /(\w)\s+/;
    ($bb) = $b =~ /(\w)\s+/;
    $l{$aa} <=> $l{$bb} || $a <=> $b
  } <>'

4

Đây là phương pháp đơn giản tôi sử dụng, sử dụng tài nguyên rất thấp và mang lại cho bạn những gì bạn cần:

du --max-depth=1 | sort -n | awk 'BEGIN {OFMT = "%.0f"} {print $1/1024,"MB", $2}'

0 MB ./etc
1 MB ./mail
2 MB ./tmp
123 MB ./public_html

4

Tìm thấy cái này trên mạng ... có vẻ hoạt động tốt

du -sh * | tee /tmp/duout.txt | grep G | sort -rn ; cat /tmp/duout.txt | grep M | sort -rn ; cat /tmp/duout.txt | grep K | sort -rn ; rm /tmp/duout.txt

Dựa trên nền tảng này, tôi đã tạo ra một kịch bản để cung cấp đầu ra du (1) có thể đọc được của con người. Vui lòng tham khảo câu trả lời của tôi, serverfault.com/a/937459/218692 .
Động học Tripp

3

Tôi đã học được awk từ việc pha chế ví dụ này ngày hôm qua. Phải mất một thời gian, nhưng nó rất vui, và tôi đã học được cách sử dụng awk.

Nó chỉ chạy du một lần và có đầu ra tương tự như du -h

du --max-depth=0 -k * | sort -nr | awk '{ if($1>=1024*1024) {size=$1/1024/1024; unit="G"} else if($1>=1024) {size=$1/1024; unit="M"} else {size=$1; unit="K"}; if(size<10) format="%.1f%s"; else format="%.0f%s"; res=sprintf(format,size,unit); printf "%-8s %s\n",res,$2 }'

Nó hiển thị số dưới 10 với một dấu thập phân.


3

du -cka --max-sâu = 1 / var / log | sắp xếp -rn | đầu -10 | awk '{in ($ 1) / 1024, "MB", $ 2'}


2

Nếu bạn cần xử lý không gian, bạn có thể sử dụng như sau

 du -d 1| sort -nr | cut -f2 | sed 's/ /\\ /g' | xargs du -sh

Tuyên bố sed bổ sung sẽ giúp giảm bớt các vấn đề với các thư mục có tên như Hỗ trợ ứng dụng


Chỉ cần thử điều này trên macOS Sierra. Hoạt động như mong đợi. Đẹp!
jasonology


1

http://dev.yorhel.nl/ncdu

lệnh: ncdu

Điều hướng thư mục, sắp xếp (tên và kích thước), vẽ đồ thị, con người có thể đọc được, v.v ...


1
Tiện ích tuyệt vời, nhưng không được cài đặt theo mặc định trên bất kỳ HĐH nào mà tôi biết. Không nhất thiết là một vấn đề, nhưng một chương trình nữa phải chăm sóc ...
voretaq7

1

Một awkgiải pháp khác -

du -k ./* | sort -nr | 
awk '
{split("KB,MB,GB",size,",");}
{x = 1;while ($1 >= 1024) 
{$1 = $1 / 1024;x = x + 1} $1 = sprintf("%-4.2f%s", $1, size[x]); print $0;}'


[jaypal~/Desktop/Reference]$ du -k ./* | sort -nr | awk '{split("KB,MB,GB",size,",");}{x = 1;while ($1 >= 1024) {$1 = $1 / 1024;x = x + 1} $1 = sprintf("%-4.2f%s", $1, size[x]); print $0;}'
15.92MB ./Personal
13.82MB ./Personal/Docs
2.35MB ./Work Docs
1.59MB ./Work Docs/Work
1.46MB ./Personal/Raa
584.00KB ./scan 1.pdf
544.00KB ./Personal/Resume
44.00KB ./Membership.xlsx
16.00KB ./Membership Transmittal Template.xlsx

1

Tôi đã sử dụng giải pháp được cung cấp bởi @ptman, nhưng một sự thay đổi máy chủ gần đây khiến nó không còn khả thi. Thay vào đó, tôi đang sử dụng tập lệnh bash sau:

#!/bin/bash
# File: duf.sh
# list contents of the current directory by increasing 
#+size in human readable format

# for some, "-d 1" will be "--maxdepth=1"
du -k -d 1 | sort -g | awk '
{
if($1<1024)
    printf("%.0f KB\t%s",$1,$2);
else if($1<1024*1024)
    printf("%.1f MB\t%s",$1/1024,$2);
else
    printf("%.1f GB\t%s",$1/1024/1024,$2);
}'

du -d 1Cú pháp BSD đã được GNU du hỗ trợ kể từ khi coreutils 8.6 được phát hành vào năm 2010 (mặc dù tính khả dụng Red Hat đầu tiên của nó là RHEL 7 vào năm 2014), do đó bạn không còn cần nữa --maxdepth=1. Gần đây tôi chỉ phát hiện ra điều này.
Adam Katz

1

du -s * | sắp xếp -nr | cắt -f2 | xargs du -sh


Đó không phải là một giải pháp tuyệt vời, bởi vì nó đi qua hệ thống tập tin hai lần.
Paul Gear

1

Có rất nhiều câu trả lời ở đây, nhiều trong số đó là trùng lặp. Tôi thấy ba xu hướng: chuyển qua cuộc gọi du thứ hai, sử dụng mã shell / awk phức tạp và sử dụng các ngôn ngữ khác.

Đây là một giải pháp tương thích POSIX sử dụng duawk nên hoạt động trên mọi hệ thống.

Tôi đã thực hiện một cách tiếp cận hơi khác, thêm vào -xđể đảm bảo chúng tôi ở trên cùng một hệ thống tệp (Tôi chỉ cần thao tác này khi tôi thiếu không gian đĩa, vậy tại sao lại loại bỏ những thứ tôi đã gắn trong cây FS này hoặc di chuyển và symlinked back?) và hiển thị các đơn vị không đổi để phân tích hình ảnh dễ dàng hơn. Trong trường hợp này, tôi thường chọn không sắp xếp để tôi có thể thấy rõ hơn cấu trúc phân cấp.

sudo du -x | awk '
  $1 > 2^20 { s=$1; $1=""; printf "%7sG%s\n", sprintf("%.2f",s/2^21), $0 }'

(Vì đây là đơn vị nhất quán, sau đó bạn có thể nối thêm | sort -nnếu bạn thực sự muốn sắp xếp kết quả ed.)

Điều này lọc ra bất kỳ thư mục nào có nội dung (tích lũy) không vượt quá 512MB và sau đó hiển thị kích thước tính bằng gigabyte. Theo mặc định, du sử dụng một kích thước khối 512 byte (do đó tình trạng awk của 2 20 khối là 512MB và 2 của 21 ước chuyển đổi các đơn vị GB - chúng ta có thể sử dụng du -kxvới $1 > 512*1024s/1024^2để có nhiều người có thể đọc được). Trong điều kiện awk, chúng tôi đặt skích thước để chúng tôi có thể xóa nó khỏi dòng ( $0). Điều này giữ lại dấu phân cách (được thu gọn vào một khoảng trắng), vì vậy cuối cùng %sđại diện cho một khoảng trắng và sau đó là tên của thư mục tổng hợp. %7scăn chỉnh %.2fkích thước GB được làm tròn (tăng lên %8snếu bạn có> 10TB).

Không giống như hầu hết các giải pháp ở đây, điều này hỗ trợ đúng cách các thư mục có khoảng trắng trong tên của chúng (mặc dù mọi giải pháp, bao gồm cả giải pháp này, sẽ xử lý sai tên thư mục có chứa ngắt dòng).


0

Ít nhất là với các công cụ thông thường, điều này sẽ khó khăn vì định dạng các số có thể đọc được của con người (lưu ý rằng sắp xếp một "công việc tốt" ở đây vì nó sắp xếp các số - 508, 64, 61, 2, 2 - nó chỉ không thể sắp xếp các số dấu phẩy động với một số nhân bổ sung).

Tôi sẽ thử theo cách khác - sử dụng đầu ra từ "du | sort -n -r" và sau đó chuyển đổi các số thành định dạng có thể đọc được bằng một số tập lệnh hoặc chương trình.


0

Những gì bạn có thể thử là:

for i in `du -s * | sort -n | cut -f2`
do
  du -h $i;
done

Mong rằng sẽ giúp.


đó là những gì xargs làm ;-)
cadrian

hehe, tôi luôn quên về xargs ;) Vào cuối ngày, bất cứ điều gì làm cho công việc được thực hiện imo.

MacOSX theo mặc định (nghĩa là bên ngoài nhà pha chế) không hỗ trợ thích hợp xargsnên hình thức này là cần thiết. Tuy nhiên, đối với các tệp có khoảng trắng trong đó, bạn cần đặt IFS:IFS=$'\n'
HankCa

0
du | sort -nr | awk '{ cmd = "du -h -d0 "$2"| cut -f1"; cmd | getline human; close(cmd); print human"\t"$2 }'
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.