【问题标题】:How do I get the last modified date of a directory?如何获取目录的最后修改日期?
【发布时间】:2018-12-10 20:15:01
【问题描述】:

我使用的是 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"))[9]; - 请参阅perldoc.perl.org/functions/stat.html。此外,您不是在检查目录,而是在检查与上面相同的字符串。
  • 嗯,你确定你得到了你所展示的,即标量上下文中的(纪元)时间戳吗?使用my $v = stat(...);,您应该得到一个简单的成功/失败布尔值(1 或'')。
  • @zdim 之间肯定有一些代码,也许是localtime($mtime)
  • @Grinnz 是的,这应该是我要提出的问题;我们为什么要猜测?此外,正如 Corion 所指出的,他们在两个样本中都使用了相同的字符串。 (还有什么可能遗漏或错误的?)
  • @Dave 我并不是要对你粗暴,但我的意思是建议在编写和发布问题时要小心。这很简单,而且你得到了很好的答案,但对于更复杂的问题,一个不精确的问题通常会让它更难回答。

标签: perl date timestamp last-modified


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这个:

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

    应该写成:

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

    perldoc stat

    stat EXPR 返回一个包含 13 个元素的列表,提供文件的状态信息,文件可以是通过 FILEHANDLE 或 DIRHANDLE 打开的文件,也可以是由 EXPR 命名的文件。

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

    还有:

    在标量上下文中,stat 返回一个布尔值,表示成功或失败

    因此,在您的代码中,当您在标量上下文中进行评估时,mtime 变量被赋值为 1。当解释为 Unix 时间戳时,这意味着 1970 年 1 月 1 日之后的 1 秒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多