SunOS 5.10 (Solaris 10) довольно старый. Есть некоторые вещи, которые он не делает.
В частности, я отмечаю, что его команда date
полагается на strftime()
для форматирования и according to the man page, 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.
Но вы можете сделать это самостоятельно в довольно короткой программе на С, которая использует fstat(2)
системный вызов.Хотя это может быть за рамки необходимого для этого вопроса, вероятно, можно скомпилировать это с помощью /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
$
Что говорят документы о значении для '+ format'? –
Документы вроде? человек дата ?? – Randomguy
Да, 'человеческая дата'. Какие спецификаторы формата разрешены в аргументе '+ format'? Что-то вроде '' +% Y% m% d "' возможно? –