Unix:文件DateFormat

时间:2017-09-11 17:07:53

标签: shell unix solaris-10

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

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

3 个答案:

答案 0 :(得分:0)

在您的示例中,您似乎认为2210是日期的一部分(它不是文件大小),您所需的格式会遗漏分钟。如果两者都是无意的,并且您正在使用GNU ls,the --time-style option should do what you need

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

对于您的示例,这将给出或多或少的结果:

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

答案 1 :(得分:0)

如果您想要的只是文件的修改时间,而不是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

答案 2 :(得分: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:%minute形式的日期字符串,并将其转换为所需的格式。

更新:现在还可以使用ls用于超过一年的文件的第二种日期格式(%月份%天%)。

您的文件输出:

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