acdbaqa@qaca010z:/tmp/joelj> ls -lrt hl.sh -rwxrwxrwx 1 acdbaqa acdba 2210 7 月 13 日 20:07 hl.sh
如何将任何文件的日期格式转换为 YYYYMMDD:HHSS
在您的示例中,您似乎认为 2210 是日期的一部分(事实并非如此,它是文件大小),并且您所需的格式省略了分钟。如果两者都是无意的,并且您正在使用 GNU ls,则
--time-style
选项应该可以满足您的需要:
ls -lrt --time-style="+%Y%m%d:%H%M%S"
对于你的例子或多或少会给出这样的结果:
-rwxrwxrwx 1 acdbaqa acdba 2210 20170713:200700 hl.sh
如果您想要的只是文件的修改时间,而不是
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
我更喜欢 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
在 Mac OS 上,
ls -alD %Y%m%d:%H%M
将会做到这一点
-rw-r--r--@ 1 emilio staff 1001 20150530:1540 yes.gif