SunOS 5.10 (Solaris 10) 已经很老了。有些事情它不做。
特别是,我注意到它的date
命令依赖于strftime()
格式化,并且根据手册页,Solaris 10 的 strftime 不支持%s
. 这解释了您在问题中所做的测试结果。
如果你真的只想要一个 YYYYMMDD 格式,下面应该可以工作:
$ date '+%Y%m%d'
如果您正在寻找一个纪元秒,那么您可能必须使用其他一些工具。例如,Nawk 应该安装在您的系统上:
$ nawk 'BEGIN{print srand}'
你可以man nawk
搜索一下srand
,看看为什么会这样。
或者,如果你已经安装了 Perl,你可以使用它:
$ perl -e 'print time . "\n";'
这些是获取当前纪元秒的策略,但您的初始date
命令是按照您建议的方式格式化日期的正确方法。
根据其他评论,您似乎也在寻找某些文件的时间戳。这不是date
命令会做的事情。在其他操作系统(如 Linux 或 FreeBSD)中,您将使用该stat
命令,该命令在 Solaris 10 中不会作为单独的 shell 命令出现。
但是您可以在一个使用fstat(2)
系统调用的非常短的 C 程序中自己完成。虽然它可能超出了此问题所需的范围,但您可以使用以下方法编译它/usr/sfw/bin/gcc
:
#include <stdio.h>
#include <time.h>
#include <fcntl.h>
#include <sys/stat.h>
int main(int argc, char **argv)
{
struct tm info;
char buf[80];
struct stat fileStat;
time_t epoch;
if(argc != 2)
return 1;
int file=0;
if((file=open(argv[1],O_RDONLY)) < -1)
return 1;
if(fstat(file,&fileStat) < 0)
return 1;
info = *localtime( &fileStat.st_mtime );
epoch = mktime(&info);
printf("%s:%ld\n", argv[1], (long) epoch );
return 0;
}
例如:
$ gcc -o filedate filedate.c
$ ./filedate /bin/ls
/bin/ls:1309814136
$ perl -e 'use POSIX; print POSIX::strftime("%F %T\n", gmtime(1309814136));'
2011-07-04 21:15:36
$ ls -l /bin/ls
-r-xr-xr-x 1 root bin 18700 Jul 4 2011 /bin/ls
$