Linux ls chỉ hiển thị ngày và kích thước tên tệp


72

Làm cách nào tôi có thể sử dụng lstrong linux để chỉ có một danh sách tên và kích thước tên tệp. Tôi không cần phải xem các thông tin khác như chủ sở hữu hoặc sự cho phép. Điều này có thể không?


1
lslà tuyệt vời vì nó có sắp xếp rất nhanh theo datetime, nhưng định dạng khó xử lý. Tôi khuyên bạn nên sử dụng mã thông báo theo kiểu - thời gian như --time-style='+&%Y%m%d+%H%M%S.%N'mã thông báo là '&', sử dụng đó làm tham chiếu, bạn có thể phân tích cú pháp đầu ra sedđể bạn cũng có thể quay lại như trước khi mã thông báo có kích thước! Nếu ai đó muốn đăng nó như một câu trả lời hoàn chỉnh, hãy thoải mái, tôi quá buồn ngủ ngay bây giờ :)
Sức mạnh của Bảo Bình

Câu trả lời:


98

Tại sao không sử dụng statthay thế ls?

stat -c "%y %s %n" *

1
Điều này là tốt, nhưng nó có vấn đề "môi trường quá lớn" / "danh sách đối số quá dài" có khả năng.
Mat

4
:-) Chỉ là một bằng chứng về khái niệm. Trong cuộc sống thực [tm] đây sẽ là mộtfind . -type f -print0 | xargs -0 stat -c "%y %s %n"
f4m8

5
Để định dạng đầu ra của stat, bạn có thể thêm thông tin chiều rộng vào chuỗi định dạng như hàm C printf, ví dụ: "%y %8s %n"nó không được ghi lại, nhưng có vẻ như hoạt động (coreutils 8.17, Fedora 18)
LiuYan 刘 刘

Bởi vì với lstôi có thể xuất nó với một nghìn char phân cách. Làm thế nào nó làm việc với stat?
Al Bundy

Tôi không thấy cách này trả lời câu hỏi?! Đó là một giải pháp bên ngoài hộp tốt đẹp, nhưng bạn sẽ mất tất cả lợi ích từ ls. Màu sắc thì sao ??
MS Berends

30

Bạn có thể có nhiều quyền kiểm soát về cách bạn liệt kê các tệp với findtiện ích. lskhông thực sự cho phép bạn chỉ định các cột bạn muốn.

Ví dụ:

$ find . -maxdepth 1 -printf '%CY%Cm%Cd.%CH%CM\t%s\t%f\n'
20111007.0601   4096    .
20111007.0601   2   b
20111001.1322   4096    a

Đối số cho printfhành động là một chi tiết trong trang. Bạn có thể chọn thông tin thời gian khác nhau, kích thước bạn muốn (kích thước tệp hoặc khối đĩa được sử dụng), v.v. Bạn cũng có thể đảm bảo an toàn cho tên tệp bất thường nếu cần xử lý thêm.


1
Trên đầu vào để tìm ('% CY% Cm% Cd.% C ...') dài. Ít nhất GNU find có %C+(đầu ra "2016-08-29 + 10: 57: 56.9201257840") và %Cc(đầu ra "Mo 29 tháng 8 năm 2016 10:57:56 CEST")
guettli

Chúc điều này làm việc trên máy Mac.
Jerinaw 17/07/18

đáng yêu và nếu bạn chỉ muốn in toàn bộ đường dẫn và kích thước, điều này sẽ hoạt động "find / path / to / -printf '% h /% f% s \ n'"
Pierluigi Vernetto

24

Bạn luôn có thể sử dụng một tiện ích khác như awkđịnh dạng đầu ra của ls1 :

/bin/ls -ls | awk '{print $7,$8,$9}'


1.Có, nói chung, bạn không nên phân tích đầu ra của ls nhưng trong trường hợp này, câu hỏi đặc biệt gọi cho nó ...


Điều đó không in kích thước tập tin mặc dù. Và nó chỉ in phần đầu tiên của tên tệp với khoảng trắng trong đó. Và nó có thể thất bại nếu lsđược đặt bí danh (nói alias ls='ls -i'). Bạn thực sự cần phải cẩn thận nếu bạn muốn phân tích cú pháp đầu ra ls.
Mat

Tôi có kích thước tệp trong đó và sau đó chỉnh sửa nó (khoảnh khắc mơ hồ) - Tôi sẽ khôi phục nó. Và tôi đồng ý về tất cả các cảnh báo phân tích lại ls, nhưng đó là những gì OP muốn ...
jasonwryan

Tôi không đồng ý, OP muốn tên tệp, không phải phần đầu tiên của tên tệp nếu tên tệp xảy ra có khoảng trắng. (Sử dụng /bin/lssẽ tránh được vấn đề bí danh.)
Mat

Điều đó được hiểu ngầm : điều được tuyên bố rõ ràng là OP muốn một giải pháp lsmà cả hai chúng tôi đồng ý sẽ không thỏa mãn yêu cầu về khoảng trắng. Các /bin/lsgợi ý là một tốt nhất.
jasonwryan

thích giải pháp này; liên quan đến các ý kiến ​​trước đây về việc không in kích thước, bạn có thể lấy kích thước bằng ls và có thể sử dụng -hđể làm cho nó có thể đọc được. Cụ thể tôi đã sử dụng: ls -lah | awk '{print $5,$6,$7,$8}'sản lượng nào : 4.0K Jan 24 18:17. Cấp, giải pháp ban đầu không nói gì về awk, nhưng trong linux chúng ta nên cho rằng đầu ra của một tiến trình sẽ luôn là đầu vào cho một tiến trình khác, phải không? ;)
abgordon

5

Bạn cũng có thể sử dụng lệnh 'ngày'. Nó rất dễ sử dụng:

ngày -r [tên tệp]


Đẹp, điều này là mới đối với tôi. Thật không may, nó không hoạt động đối với một số tệp thông qua globalbing: date -r foo*.txt->date: extra operand "foo2.txt"
guettli

4

Nếu bạn muốn sử dụng ls, nhưng giữ nguyên kích thước phù hợp, bạn có thể sử dụng:

ls -Ss1pq --block-size=1

1

trong đó không gian được định nghĩa là dấu phân cách và f6 có nghĩa là trường 6

ls -lt | cut -d" " -f6-

2
nó thất bại vì ls sử dụng khoảng trắng để thụt lề và đôi khi nó là -f6- lần khác là -f5-
Sức mạnh của Bảo Bình


-1

ls -s1 chỉ trả về kích thước tệp và tên trên AIX, không chắc chắn về Linux


2
Bạn có thể giải thích làm thế nào / tại sao bạn tin điều này trả lời câu hỏi?
Scott
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.