shell Unix:File DateFormat

2nbm6dog  于 11个月前  发布在  Shell
关注(0)|答案(4)|浏览(113)

acdbaqa@qaca010z:/tmp/joelj> ls -lrt hl.sh-rwxrwxrwx 1 acdbaqa acdba 22107月13日20:07hl.sh
如何将任何文件的日期格式转换为YYYYMMDD:HHSS

kiz8lqtg

kiz8lqtg1#

在你的例子中,你似乎认为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

fnatzsnv

fnatzsnv2#

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

vmjh9lq9

vmjh9lq93#

我喜欢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用于一年以上文件的第二种日期格式(%month %day %year)。

文件的输出:

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

ltskdhd1

ltskdhd14#

在Mac OS上,ls -alD %Y%m%d:%H%M将执行此操作

-rw-r--r--@   1 emilio  staff      1001 20150530:1540 yes.gif

字符串

相关问题