如何使用Perl在Unix中获取文件创建时间

时间:2014-10-12 15:11:41

标签: perl shell unix unix-timestamp

如何使用perl在unix中获取文件创建时间?

我有这个命令显示文件的最后修改时间:

perl -MPOSIX -le 'print strftime "%d %b %Y %H:%M ".$_, localtime((lstat)[9]) for @ARGV' file.txt

2 个答案:

答案 0 :(得分:0)

UNIX中通常没有文件创建时间。新的xstat()接口承诺支持它,但perl不使用它。可以编写基于XS的界面来访问它。

在UNIX上的Perl中,ctime代表Inode更改时间,它与文件创建无关。

根据perlportctime仅在Windows上创建时间,但您可能希望使用Win32API::File::Time::GetFileTime(),因为它更明确(并且对搬运工来说很明显)您的程序取决于创建时间,而不是ctime包含的内容。

答案 1 :(得分:-1)

你几乎拥有它。

您只需将localtime而不是文件名的返回值传递给strftime

perl -MPOSIX -e 'printf "%s %s\n", $_, strftime("%d %b %Y %H:%M", localtime((lstat)[9])) for @ARGV' file.txt

输出:

file.txt 10 Oct 2014 15:38

即使需要更多代码,我也倾向于使用Time::PieceFile::stat来使代码更具现代性和可读性:

perl -MTime::Piece -MFile::stat -e '
    printf "%s %s\n",  $_, localtime( stat($_)->mtime )->strftime("%d %b %Y %H:%M") for @ARGV
  ' file.txt