我的程序如下所示,其中$i是一个文件。
TIMESTAMP=`ls -ltr $i | awk '{print $6,$7,$8;}'`
它的输出是Jan 6 12:13
。
对于基于日期的排序,我需要将其转换为DD/MM/YY HH:MM
格式。
另外,请建议是否有方法以Jan 6 12:13的格式对带有时间戳的文件进行排序。
我目前使用的是Korn shell。Solaris 5.10。
发布于 2016-01-07 06:02:51
在absolutely no 的情况下,解析ls(1)输出!
取而代之的是,为作业使用正确的工具。如果需要对ls输出进行排序,请使用ls的各种排序选项。如果需要进行其他处理,请使用工具…在我可以访问的Solaris 8安装中,安装了GNU stat,这使得这很容易:
tg@stinky:~ $ stat -c '%y %n' /bin/[ck]sh
2008-07-08 14:16:07.000000000 +0200 /bin/csh
2008-06-10 16:28:32.000000000 +0200 /bin/ksh
tg@stinky:~ $ uname -a
SunOS stinky 5.8 Generic_117350-61 sun4u sparc SUNW,Sun-Fire-V240 Solaris
否则,您可以使用具有stat(2)访问权限的脚本语言(如Perl )来显示路径名的时间,如下所示(不过要注意文件名中的换行符):
tg@stinky:~ $ find /bin/[ck]sh | perl -MPOSIX -ne 'chomp; print POSIX::strftime("%d/%m/%Y %H:%M\n",localtime((stat)[9]));'
08/07/2008 14:16
10/06/2008 16:28
但是,正如其他人已经在评论中指出的那样,%Y-%m-%d
确实更容易排序。
Korn Shell没有任何用于时间处理的内置函数。
它的“文件名中的魔法字符”-safe版本(也是在Solaris8下测试的)是:
find /bin/[ck]sh -print0 | perl -0 -MPOSIX -ne 'chomp; print POSIX::strftime("%d/%m/%Y %H:%M\n",localtime((stat)[9]));'
当然,find /bin/[ck]sh
部分只是一个示例,您可以将拥有的任何路径名列表提供给该命令。
https://stackoverflow.com/questions/34638600
复制相似问题