ls-lệnh: làm thế nào để hiển thị kích thước tệp tính bằng megabyte?


161

Trong Unix (Tru64), làm cách nào để tạo lslệnh hiển thị kích thước tệp tính bằng megabyte? Hiện tại tôi có thể hiển thị nó theo byte bằng cách sử dụng như sau:

ls -la

Câu trả lời:


247

Có lẽ -hlà đủ cho bạn:

-h
Khi được sử dụng với tùy chọn -l, hãy sử dụng các hậu tố đơn vị: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte và Petabyte để giảm số lượng chữ số xuống còn ba hoặc ít hơn bằng cách sử dụng cơ sở 2 cho kích thước.

ls -lah

Lời khuyên chung: Sử dụng man commandnameđể đọc hướng dẫn / trợ giúp của một lệnh nhất định, ví dụ ở đây man ls.


1
Cảm ơn, nhưng tùy chọn -h dường như không tồn tại trên Tru64 Unix.

8
Lời khuyên chung: cài đặt các tiện ích GNU ...
Revierpost

22
Tôi thích mẹo của bạn về việc sử dụng con người, nhưng thực sự, tìm kiếm trên Google nhanh hơn nhiều so với sử dụng con người rất nhiều thời gian (như bây giờ, khi tôi tìm thấy kết quả này trên Google).
trusktr

4
Tốt của Google và tất cả các gợi ý chung, nhưng cuối cùng các trang man là hệ thống / HĐH, thậm chí là máy chủ lưu trữ cụ thể, thường được tạo khi phần mềm được biên dịch hoặc cài đặt, và do đó, có thẩm quyền cho phần mềm trên hệ thống cụ thể của bạn.
Nevin Williams

1
Chỉ cần đến vòng tròn đầy đủ, có người đàn ông trực tuyến cho gnu / linux: linux.die.net/man
MariusMatutiae

32

ls --block-size=Min các kích thước tính bằng Megabyte nhưng cũng hiển thị 1 MB cho mọi thứ dưới 1 MB. Tuy nhiên, tôi không chắc tùy chọn này có được chấp nhận trong phiên bản UNIX của ls không.

Trên thực tế ls -lhcũng in các kích thước tính bằng Gigabyte nếu tệp đủ lớn (Dù sao đi nữa: trên Linux 64 bit, điều này không hoạt động:>)

Trên một nút bên: du -sh *in cũng kích thước thư mục trong thư mục hiện tại.


Cảm ơn! Tôi cần theo dõi các thay đổi tệp trực tiếp trong một thư mục và việc sử dụng ls -hlà vô nghĩa sau khi tệp tăng hơn 1GB, vì vậy tôi sử dụng lệnh này trong vòng 1 giây:while true ; do ls -al --block-size=M ; sleep 1 ; done
ccpizza

15

Bạn sẽ phải sử dụng awkđể làm toán cho bạn:

ls -l | awk 'BEGIN{mega=1048576} $5 >= mega {$5 = $5/mega "MB"} {print}'

Điều này sẽ không ảnh hưởng đến đầu ra cho các tệp nhỏ hơn mega.

Bạn có thể cần điều chỉnh số trường để khớp với cách bạn lstrình bày. Bạn có thể thay đổi megathành "1000000" nếu đó là sở thích của bạn.

Điều này sẽ in nhiều vị trí thập phân hơn bạn có thể muốn. Bạn có thể thực hiện một chức năng làm tròn.


3
Ít thanh lịch hơn ls -lhhoặc ls --block-size=M, nhưng AWK rất hữu ích!
Statwonk

Đúng thứ tôi cần. Tất cả các giải pháp khác làm tròn đến MB gần nhất nhưng điều này cho thấy một vài vị trí thập phân và có thể dễ dàng tùy chỉnh.
zeroimpl

3
Đây là một giải pháp tốt cho những hệ thống đó (AIX - Tôi đang xem xét bạn) không có tùy chọn -h.
Buggabill


8

Hãy thử ls -lash, nó in kích thước ở định dạng con người có thể đọc được


5

du -sm filename.txt


1
nó luôn làm tròn kích thước ... nếu kích thước nhỏ hơn 1 MB, tức là 500K, thì nó cũng sẽ in 1M
AnonGeek

5

Bạn cũng có thể gõ

du -sh ./*

Điều này sẽ liệt kê tất cả các thư mục trong thư mục hiện tại, với định dạng có thể đọc được, bao gồm các kích thước tệp quen thuộc hơn trong Kb, Mb, Gb.


2

Nếu bạn chỉ muốn kích thước của một tệp cụ thể, thì lệnh, phép ngoại suy tầm thường của các câu trả lời trước đó là:

Tên tệp ls -sh

-sdành cho kích thước và hdành cho con người có thể đọc được (như đã đề cập ở trên một vài lần).

Đầu ra sẽ như thế này:

753M myfilename

Nếu bạn bỏ (các) tên tệp, nó sẽ liệt kê thư mục, đặt kích thước của mỗi tệp bên cạnh tên của nó - không giống như những gì ls -lakhi được gọi mà không có đối số tên tệp.

Hi vọng điêu nay co ich.


2
Câu hỏi này là về Tru64 Unix và OP đã tuyên bố gần năm năm trước rằng -htùy chọn này không tồn tại lstrên hệ thống đó.
G-Man

2
ls -l --block-size=MB 

Đối với --block-sizetham số:

  • sử dụng MBtrong 10 ^ 6
  • chỉ sử dụng Mcho 2 ^ 20

Lưu ý rằng điều này sẽ không hiển thị bất kỳ vị trí thập phân . Ngoài ra, mọi thứ trên 0 kB nhưng không lớn hơn 1 MB sẽ được hiển thị dưới dạng1MB . Vì lý do này, tôi thấy ls -l --block-size=kBlà hữu ích hơn.
DaAwgieP

0

Nếu bạn chỉ quan tâm đến kích thước tệp và bạn không phải sử dụng lslệnh, hãy thử cách sau:

# echo "Hello World" > file.txt
# ls -l file.txt 
-rw-r--r-- 1 user user 12 Mar 10 11:32 file.txt
# stat --printf='%s\n' file.txt
12

Điều này sẽ in kích thước tập tin mà không cần phải phân tích bất cứ điều gì.


OP muốn kích thước tính bằng MB, có thể một tùy chọn chỉ số sẽ tạo ra kích thước ở dạng người có thể đọc được?
Archemar

Ah, đó là sự ngu ngốc của tôi. Cảm ơn đã nắm bắt điều đó. stat không có tùy chọn để thao tác kích thước bằng cách sử dụng --printf hoặc bất kỳ tùy chọn nào khác theo như tôi biết. Nó có thể sẽ yêu cầu sử dụng kết hợp các tiện ích dòng lệnh printf và bc. Trong trường hợp nào, tại sao phải bận tâm. ls và cắt / awk sẽ nhanh hơn.
SKN
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.