Làm cách nào để thay đổi định dạng thời gian được sử dụng bởi dòng lệnh ls trên osx?


27

Tôi muốn làm cho lsthời gian hiển thị ở ISOđịnh dạng (định dạng quân sự). Làm thế nào tôi có thể thay đổi hành vi này?

Trên Linux tôi biết rằng tôi có thể buộc ls hiển thị thời gian ở định dạng dài bằng usin --full-timenhưng điều này không hoạt động trên OS X.

Cập nhật: Tôi biết rằng định dạng được sử dụng bởi lệnh dựa trên các localecài đặt. Vấn đề là trên OS XI không thể sử dụng thủ thuật cài đặt LC_TIME=en_DK.


1
Không trả lời, nhưng vẫn có thể hữu ích: Lệnh stat (1) khá linh hoạt và có thể được thực hiện để hiển thị tem thời gian ở bất kỳ định dạng mong muốn nào.
Harald Hanche-Olsen

gls (gnu ls) Tôi đã đề cập trong câu trả lời của mình có thể lấy cờ --style = trong đó bạn có thể chỉ định chuỗi + FORMAT, do đó bạn có thể làm cho ngày xuất hiện bất cứ cách nào bạn muốn.
barryj

Tôi ước tôi biết một cách. Hướng dẫn sử dụng BSD của Apple lsdường như không cung cấp gì cho định dạng thời gian, ngoài việc thay đổi múi giờ và sắp xếp theo thời gian chứ không phải alpha. developer.apple.com/l
Library / mac / documentation / Darwin / Reference / 2007

Câu trả lời:


16

Nếu bạn cài đặt gnu coreutils thì gnu ls có sẵn, sẽ làm theo yêu cầu. Nếu bạn sử dụng brew như một trình quản lý gói, nó đơn giản như:

brew install coreutils
gls -l --time-style=full-iso

Cảm ơn, điều này rất hữu ích nhưng không giải quyết được vấn đề. Định dạng đầy đủ được sử dụng vẫn không phải là ISO-8601.
sorin

OK - bạn có thể cài đặt gut coreutils bao gồm gnu ls, nó sẽ làm những gì bạn muốn. Cách dễ nhất là một trong những loại bia, MacPorts hoặc Fink. Tôi sử dụng brew - vì vậy chỉ cần chạy 'brew install coreutils'. Sau đó, bạn sẽ có gls có sẵn.
barryj

1
Đáng chú ý, brew install coreutilskết quả /usr/local/bin/glsđược cài đặt, vì vậy bạn cần phải chạy glsthay vì ls.
erik.weathers

Bạn cần chỉ định định dạng thời gian bằng gls -l --time-syle="+%I"(hoặc bất kỳ gdateđịnh dạng đúng kiểu nào dành cho ISO-8601).
rubynorails

Cuộc gọi đúng là như vậy; gls -l --time-style = full-iso
AnneTheAgile

13

lsLệnh dựng sẵn của OS X không mất thời gian định dạng đối số, nhưng statlệnh sẽ lấy chuỗi định dạng strftime để bạn có thể lấy xấp xỉ những gì bạn muốn bằng cách thực hiện:

stat -l -t '%FT%T' *

Việc %FT%Ttạo ra dấu thời gian cục bộ ISO8601. Thêm một %znếu bạn muốn bù UTC.

Nhưng trong khi dấu thời gian là đúng, phần còn lại chỉ xấp xỉ những gì bạn nhận được từ ls. Chẳng hạn, ls -lcăn chỉnh chính xác các trường thành các cột, có thể tô màu đầu ra và tất nhiên nó liệt kê nội dung thư mục thay vì yêu cầu bạn chuyển tất cả tên tệp làm đối số. Ít nhất bạn có thể tái tạo căn chỉnh phù hợp bằng cách chuyển đầu ra qua trđể chuyển đổi tất cả các khoảng trắng thành các tab:

stat -l -t '%F%T' * | tr ' ' \\t

Ngoài ra, tôi nghĩ rằng có thể ls -ltạo ra dấu thời gian ISO8601 bằng cách xác định miền địa phương tùy chỉnh, nhưng tôi chưa thấy nó được thực hiện.


-1

ls -l --time-style=iso làm việc tốt cho tôi


1
Không. Con sư tử núi.
Nakilon

2
Không phải trên Mavericks.
Cầu đất sét

4
Nó có thể hoạt động tốt cho OP, bởi vì anh ta hoặc cô ta đã cài đặt một hệ thống lskhông phải hệ thống mà không nhận ra nó, thông qua một trình quản lý gói như brew.
tảo

1
Đồng ý với @acheal. Tôi đã /usr/local/bin/glscài đặt thông qua brew install coreutils, và điều đó hỗ trợ --time-styletùy chọn. OP có thể đã chạy brew install coreutils --with-default-namesdẫn đến /usr/local/bin/lsviệc được cài đặt (trong số các tiện ích khác) hoặc có thể OP thiết lập một liên kết tượng trưng thủ công gls.
erik.weathers

Bạn thấy gì khi bạn bước vào which ls?
mschaef
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.