如何更改osx上ls命令行使用的时间格式?


27

我想以格式(军事格式)ls显示时间ISO。我该如何改变这种行为?

在Linux上,我知道我可以通过usin强制ls以长格式显示时间,--full-time但这在OS X上不起作用。

更新:我知道该命令使用的格式基于locale设置。问题是在OS XI上无法使用设置技巧LC_TIME=en_DK


1
无解答,但仍可能有用:stat(1)命令非常灵活,可以使它以任何所需的格式显示时间戳。
Harald Hanche-Olsen 2011年

我在答案中提到的gls(gnu ls)可以带有--style =标志,您可以在其中指定+ FORMAT字符串,这样就可以使日期以您希望的方式显示。
barryj 2011年

我希望我知道一个方法。Apple的BSD手册ls似乎没有提供任何用于格式化日期时间的内容,除了更改时区和按日期时间而不是alpha进行排序。developer.apple.com/library/mac/documentation/Darwin/Reference/...
jtheletter

Answers:


16

如果安装gnu coreutils,则gnu ls可用,这将根据需要执行。如果将brew用作程序包管理器,则非常简单:

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

谢谢,这很有用,但不能解决问题。使用的完整格式仍不是ISO-8601。
sorin 2011年

好的-您可以安装包含gnu ls的gnu coreutils,该工具可以执行您想要的操作。最简单的方法是brew,MacPorts或Fink之一。我用brew-所以只运行'brew install coreutils'工作。然后,您将可以使用gls。
barryj 2011年

1
值得注意的是,brew install coreutils结果/usr/local/bin/gls是已安装,因此您需要运行gls而不是ls
erik.weathers 16-8-16的

您需要使用指定时间格式gls -l --time-syle="+%I"(或gdateISO-8601 的正确样式格式)。
rubynorails

因此,正确的呼叫是;gls -l --time-style = full-iso
AnneTheAgile

13

OS X的内置ls命令不带时间格式参数,但该stat命令带strftime格式字符串,因此您可以通过以下操作获得所需的近似值:

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

%FT%T产生ISO8601本地时间戳。%z如果需要UTC偏移量,请添加一个。

但是,尽管时间戳正确,但其余时间仅近似于您从ls获得的结果。例如,ls -l将字段正确地对齐成列,可以使输出着色,并且当然它列出目录内容,而不是要求您将所有文件名都作为参数传递。您可以至少通过tr传递输出以将所有空格转换为制表符来重现正确的对齐方式:

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

另外,我认为应该可以ls -l通过定义自定义区域设置来产生ISO8601时间戳,但是我还没有看到它完成的过程。


-1

ls -l --time-style=iso 对我来说很好。


1
不。山狮。
Nakilon 2013年

2
也不在小牛上。
粘土桥

4
对于OP来说,这可能工作得很好,因为他或她已经ls通过brew等软件包管理器安装了一个未意识到的非系统。

1
同意@algal。我已经/usr/local/bin/gls通过安装了brew install coreutils,并且支持该--time-style选项。OP可能已运行brew install coreutils --with-default-names(可能会导致/usr/local/bin/ls安装)(以及其他实用程序),或者OP设置了与的手动符号链接gls
erik.weathers

进入时会看到什么which ls
mschaef
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.