如何在Unix中获取文件的修改日期(包括年份)?

如何在Unix中获取文件的修改日期(包括年份)?,unix,Unix,我正在寻找一个命令,以便在Unix中获取修改后的文件日期,包括年份字段,而不使用stat,因为我们使用的是SunOS 5.10 当前当我使用 ls -lrt A.sh 我们得到以下详细信息: -rw-r--r-- 1 dev dev 593 Jan 1 02:18 A.sh 我怎样才能得到这一年呢?你可以试试这个 perl -MPOSIX -le 'print strftime "%d %b %Y %H:%M ".$_, localtime((lstat)[9]) fo

我正在寻找一个命令,以便在Unix中获取修改后的文件日期,包括年份字段,而不使用
stat
,因为我们使用的是SunOS 5.10

当前当我使用

ls -lrt A.sh
我们得到以下详细信息:

-rw-r--r--   1 dev   dev       593 Jan  1 02:18 A.sh
我怎样才能得到这一年呢?

你可以试试这个

perl -MPOSIX -le 'print strftime "%d %b %Y %H:%M ".$_, localtime((lstat)[9]) for @ARGV' a.sh
由于这是一个编程问答网站,我只需实现一个小型C程序,它使用
stat
调用提取信息

它提供了一个
struct stat
结构,其中包含访问、修改和状态更改时间的
time\t


然后,您可以使用
localtime
将其转换为
struct tm
结构,并提取相关字段以进行输出(从内存中,
tm_year+1900
tm_mon+1
tm_mday
以及需要的时间字段)。

这里有一种有点粗俗的方法:

truss -t lstat64 -v lstat64 /bin/ls A.sh 2>&1 |
    nawk '/mt =/ {printf("%s %2s %s %s %s\n",$3,$4,$5,$6,$7);}'

ls
具有
--时间样式
选项:

或者,您可以根据
date

ls -lrt --time-style="+%Y-%m-%d %a %T" A.sh

你为什么不想使用stat命令呢?在任何情况下,我似乎记得,如果日期和时间是在过去六个月左右,那么您(从ls)只能得到日期和时间,否则您只能得到日期和年份。STAT命令在SUNOSI建议将post迁移到更可能得到答案的位置。@Prabs,更新了我的答案。我认为使用Perl是一个好方法。如果您想知道文件的修改时间,应该使用
stat
而不是
lstat
,否则,这(现在)看起来似乎是合理的(在Mac OS X 10.9.1和Perl 5.18.1上适用,但在Solaris上也应该可以)。
ls -lrt --time-style=long-iso A.sh
-rw-r--r--   1 dev   dev       593 2014-01-02 02:18 A.sh
ls -lrt --time-style="+%Y-%m-%d %a %T" A.sh
-rw-r--r--   1 dev   dev       593 2014-01-02 Tue 02:18:00 A.sh