Unix:文件日期格式

问题描述 投票:0回答:4

acdbaqa@qaca010z:/tmp/joelj> ls -lrt hl.sh -rwxrwxrwx 1 acdbaqa acdba 2210 7 月 13 日 20:07 hl.sh

如何将任何文件的日期格式转换为 YYYYMMDD:HHSS

shell unix solaris-10
4个回答
1
投票

在您的示例中,您似乎认为 2210 是日期的一部分(事实并非如此,它是文件大小),并且您所需的格式省略了分钟。如果两者都是无意的,并且您正在使用 GNU ls,则

--time-style
选项应该可以满足您的需要

ls -lrt --time-style="+%Y%m%d:%H%M%S"

对于你的例子或多或少会给出这样的结果:

-rwxrwxrwx   1 acdbaqa  acdba       2210 20170713:200700 hl.sh

1
投票

如果您想要的只是文件的修改时间,而不是

ls
,请考虑使用
stat
命令:

stat -f %Sm -t %Y%m%d:%H%M%S hl.sh

这是日期/时间格式的长形式;它可以缩写为

%F:%T

如果没有

stat
,可以使用
perl
:

perl -MPOSIX -le 'print(strftime "%Y%m%d:%H%M%S", localtime((stat "hl.sh")[9]))'

您可以在代码外部传递文件名以避免引用/插值问题:

perl -MPOSIX -le 'print(strftime "%Y%m%d:%H%M%S", localtime((stat $ARGV[0])[9]))' hl.sh

0
投票

我更喜欢 stat 命令,但在 Ubuntu 上我无法正确使用它。 这是我的答案。它使用 perl 进行一些字符串操作,因此它可能被认为是某种解决方法。

ls -lrt somefiles |perl -MDate::Manip -pe 's/^([-\w]+ \d+ \w+ \w+ \d+ )(\w+ +\d+ +[:\d]+)/$1.UnixDate(ParseDate($2),"%Y%m%d:%H%M")/e'

这可以识别 %month %day %hour:%min 形式的日期字符串,并将其转换为所需的格式。

更新:现在还可以使用第二种日期格式,

ls
用于一年以上的文件(%月%日%年)。

文件的输出:

-rwxrwxrwx 1 acdbaqa acdba 2210 20170713:2007 hl.sh

0
投票

在 Mac OS 上,

ls -alD %Y%m%d:%H%M
将会做到这一点

-rw-r--r--@   1 emilio  staff      1001 20150530:1540 yes.gif
© www.soinside.com 2019 - 2024. All rights reserved.