Làm thế nào để tôi sắp xếp theo kích thước có thể đọc được của con người bằng số?


20

ví dụ tôi có lệnh hiển thị bao nhiêu không gian thư mục

du folder | sort -n

nó hoạt động rất tốt, tuy nhiên tôi muốn có dạng người dễ đọc

du -h folder

tuy nhiên nếu tôi làm điều đó hơn tôi không thể sắp xếp nó thành số.

Cách tham gia du folderdu -h folderđể xem đầu ra được sắp xếp như du folder, nhưng với cột đầu tiên từdu -h folder

PS đây chỉ là một ví dụ. kỹ thuật này có thể rất hữu ích cho tôi (nếu có thể)

Câu trả lời:


11

Đây là một cách tiếp cận tổng quát hơn. Nhận đầu ra của du folderdu -h foldertrong hai tập tin khác nhau.

du folder > file1
du -h folder > file2

Phần quan trọng là đây: nối file1file2theo từng dòng, với một dấu phân cách phù hợp.

paste -d '#' file1 file2 > file3

(giả sử #không xuất hiện trong file1file2)

Bây giờ sắp xếp file3. Lưu ý rằng điều này sẽ sắp xếp dựa trên file1nội dung và phá vỡ mối quan hệ theo file2nội dung. Trích xuất kết quả có liên quan bằng cách sử dụng cut:

sort -n -k1,7 file3 | cut -d '#' -f 2

Ngoài ra hãy xem man sortcác lựa chọn khác.


Bạn cũng có thể lưu nó dưới dạng bí danh, để sử dụng lại sau. Để làm như vậy, thêm phần sau vào dưới cùng của ~/.bashrc:

sorted-du () {
    paste -d '#' <( du "$1" ) <( du -h "$1" ) | sort -n -k1,7 | cut -d '#' -f 2
}

Sau đó, mở một phiên cuối mới và thực hiện bí danh mới của bạn:

sorted-du /home

Tôi đã thêm phần cuối cùng về cách biến giải pháp của bạn thành bí danh.
SirCharlo

1
Sử dụng các tệp thực tế trong một bí danh (và sau đó gọi rm trên chúng) là một ý tưởng thực sự tồi tệ ! Hãy suy nghĩ về những gì sẽ xảy ra nếu tôi thực sự có một tập tin có tên file3trong thư mục của tôi, nó sẽ bị ghi đè và sau đó bị xóa! @SirCharlo Tôi đang xóa định nghĩa bí danh khỏi câu trả lời này và thay thế nó bằng một cái gì đó an toàn hơn.
jmiserez

Vâng, yêu cầu Ubuntu.com / a / 80248/22308 chỉ cần làm điều này vớisort -h
Nam G VU

36

Hãy thử một cái gì đó như:

du -h folder | sort -h

Các lựa chọn thay thế: -nđể phân loại số

Lưu ý: -htùy chọn sắp xếp chỉ tồn tại trong các phiên bản Ubuntu mới hơn.


3
có phiên bản 8.17, vì vậy tôi đoán đây là cách dễ nhất
steabert

1
Cảm ơn steabert đã chỉ ra rằng lệnh sort đã được cải thiện từ sort --version = 8.17 Đây là câu trả lời tốt nhất cho các phiên bản Ubuntu mới hơn.
Kat Amsterdam

Đây phải là một trong những nguyên nhân được chấp nhận để giải quyết vấn đề OP vớisort -h
Nam G VU

4

Câu trả lời này có giá trị cho 10.04.4LTS và các phiên bản thấp hơn của Ubuntu.

Thật không may câu trả lời chính xác mà sắp xếp KMG là khó khăn và phức tạp:

Bạn có thể đặt bí danh cho toàn bộ lệnh du với một lệnh sắp xếp con người có thể đọc được bằng cách này

alias duf='du -sk * | sort -n | perl -ne '\''($s,$f)=split(m{\t});for (qw(K M G)) {if($s<1024) {printf("%.1f",$s);print "$_\t$f"; last};$s=$s/1024}'\'

mà tôi tìm thấy ở đây

http://www.earthinfo.org/linux-disk-usage-sort-by-size-and-human-readable/

Chỉ cần cd vào thư mục bạn muốn biết sau đó duf

bạn có thể thêm bí danh duf này vào cuối /home/user/.profile của bạn để tạo lệnh duf semi-permenant

các kết quả:

user@hostname:~$ duf
0.0K  Documenten
0.0K  Muziek
0.0K  Openbaar
0.0K  Sjablonen
0.0K  Video's
4.0K  backup_db.sql.g
4.0K  examples.desktop
12.0K xml printer ticket
52.0K hardinfo_report.html
152.0K    librxtxSerial.so
2.7M  jpos
4.4M  nxclient_3.5.0-7_amd64.deb
6.4M  nxnode_3.5.0-4_amd64.deb
6.8M  Downloads
7.4M  nxserver_3.5.0-5_amd64.deb
12.4M NetBeansProjects
18.1M mysqlworkbench.deb
28.3M Afbeeldingen
45.8M ergens-20110928-18.sql.gz
60.5M 2012-06-02ergens_archive.tar.gz
65.5M 2012-08-26ergens_archive.tar.gz
65.6M 2012-08-28ergens_archive.tar.gz
65.6M 2012-08-29ergens_archive.tar.gz
65.7M 2012-08-30ergens_archive.tar.gz
113.0M    Bureaublad
306.2M    ergens-20110928-18.sql

Đây là lý do tại sao du -sch /var/* | sort -nkhông hoạt động thấy phân loại MKKMMKKMMK

user@hostname:~$ du -sch /var/* |sort -n

0 /var/crash
0 /var/local
0 /var/lock
0 /var/opt
8,0M  /var/backups
12K   /var/games
16K   /var/tmp
17M   /var/log
68M   /var/cache
104K  /var/spool
144K  /var/run
351M  /var/lib
443M  totaal
704K  /var/mail

Tôi đã báo cáo điều này với các nhà phát triển lõi gnu với yêu cầu tính năng để cải thiện chức năng du -h với tính năng sắp xếp. thông qua bug-coreutils@gnu.org
Kat Amsterdam

+1, một lớp lót tương tự:du folder | sort -n | cut -f 2 | while IFS= read -r -d '' path; do du -sh -- "$path"; done
steabert

Chỉ cần thử 1 lớp lót của bạn trên một hệ thống trực tiếp. Nhận được một lỗi từ chối truy cập và không có kết quả du. Bạn đã thử lệnh này trên hệ thống Ubuntu trước chưa? Tôi đã thay đổi thư mục thành / home / tên người dùng
Kat Amsterdam

oh, xin lỗi, bạn nên bỏ đi -d '', đó là phần còn lại từ việc sử dụng nó trên đầu ra của lệnh tập tin.
steabert

Điều này dường như hoạt động rất tốt trên các hệ thống không có Linux không hỗ trợ GNU sort.
Stefan Lasiewski

2

Lệnh GNU sortcó tùy chọn sau:

-h, --human-numeric-sort so sánh các số có thể đọc được của con người (ví dụ: 2K 1G).

Để có tùy chọn này trên BSD / OSX, bạn có thể cài đặt sorttừ coreutils(thông qua brew) và thêm thư mục bin PATHvào tệp RC của bạn .

Vì vậy, lệnh sẽ trông như sau:

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

0

Đối với các phiên bản gần đây của Ubuntu, hãy sử dụng du -h directory | sort -h.

Tôi sử dụng một hình thức này mọi lúc để tìm các tập tin ngoài tầm kiểm soát.


Bản sao của câu trả lời 17 tháng 11 '11 lúc 17:13 Allu2
Elder Geek

0

Mở thiết bị đầu cuối của bạn với Ctrl+ Alt+ tvà gõ:

  du -sk * | sort -rn 

: DI hiện được sử dụng để thay đổi Ctrl + Alt + t thành định dạng ở trên rất nhiều để tôi đã dán định dạng bắt buộc vào Xpad của mình. : D Cảm thấy tuyệt vời khi được khen ngợi về một công việc mang tính đàn ông như vậy :)
jobin 23/12/13

Mỗi công việc bạn đã làm ở đây có giá trị bổ sung.
rdʒɑ 23/12/13

0

Cái này xử lý tên tệp với khoảng trắng hoặc dấu nháy đơn và hoạt động trên các hệ thống không hỗ trợ xargs -dhoặc sort -h:

du -s * | sort -n | cut -f2 | tr '\n' '\0' | xargs -0 -I {} du -sh "{}"

kết quả là:

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm

Điểm thay thế \nbằng \0gì? Không phải là quá muộn cho điều đó sao?
muru

nó chuẩn bị đầu vào cho xargs -0, dự kiến ​​đầu vào sẽ được phân định bằng NUL (như find -print0 sẽ tạo ra). Nếu không, bạn không thể sử dụng -0 và dấu nháy đơn có ý nghĩa đặc biệt.
Mark Crossfield

Tôi biết -0, nhưng nó không liên quan: imgur.com/87w3vfj
muru

Tôi nghĩ rằng nó đang hoạt động như bạn đã sử dụng một backtick, không phải là dấu nháy đơn. gist.github.com/mrmanc/8aef830945ce03aa65f0
Mark Crossfield

0

Cái tôi thấy hoạt động trên tất cả các hệ thống bất kể phiên bản nào ( sort -hkhông hoạt động với tôi) là

du -h $(du * | sort -n | awk '{print $2}')

các awk '{print $2}'cơ bản in tên tập tin.

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.