如何使用perl在unix中获取文件创建时间?
我有这个命令显示文件的最后修改时间:
perl -MPOSIX -le 'print strftime "%d %b %Y %H:%M ".$_, localtime((lstat)[9]) for @ARGV' file.txt
答案 0 :(得分:0)
UNIX中通常没有文件创建时间。新的xstat()接口承诺支持它,但perl不使用它。可以编写基于XS的界面来访问它。
在UNIX上的Perl中,ctime
代表Inode更改时间,它与文件创建无关。
根据perlport,ctime
仅在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::Piece
和File::stat
来使代码更具现代性和可读性:
perl -MTime::Piece -MFile::stat -e '
printf "%s %s\n", $_, localtime( stat($_)->mtime )->strftime("%d %b %Y %H:%M") for @ARGV
' file.txt