如何获取目录的最后修改日期?

How do I get the last modified date of a directory?

我使用的是 5.16.3。如何获取目录的最后修改时间戳?有了文件,我可以运行

    my $deployFile = "$jbossHome/standalone/deployments/$artifactId.$packaging";
    open my $fh, '>', $deployFile or die("File does not exist.");
    my $mtime = (stat ($fh))[9]; 

我用一个目录尝试了这个逻辑,

my $mtime = stat("$jbossHome/standalone/deployments/$artifactId.$packaging");

但结果总是

Thu Jan  1 00:00:01 1970

尽管我可以在服务器上告诉目录的最后修改时间戳是这个周末。

这个:

my $mtime = stat("$jbossHome/standalone/deployments/$artifactId.$packaging");

应该写成:

my $mtime = (stat("$jbossHome/standalone/deployments/$artifactId.$packaging"))[9];

参见 perldoc stat

stat EXPR returns a 13-element list giving the status info for a file, either the file opened via FILEHANDLE or DIRHANDLE, or named by EXPR.

在结果列表中,mtime 位于第 10 个位置(索引 9)。

还有:

In scalar context, stat returns a boolean value indicating success or failure

因此,在您的代码中,您在标量上下文中求值时,mtime 变量被赋值为 1。当将 interpretef 作为 Unix 时间戳时,这意味着 1970 年 1 月 1 日之后的 1 秒。

您可以使用核心 File::stat 获得更好的统计字段界面。

use strict;
use warnings;
use File::stat;
my $stat = stat($filename) or die "stat $filename failed: $!";
my $mtime = $stat->mtime;