【问题标题】:How to get the last modified date for a file in Perl?如何在 Perl 中获取文件的最后修改日期?
【发布时间】:2014-01-09 00:25:12
【问题描述】:

如何获取Perl中文件的最后修改日期?

我能够获取最后修改的文件,但我需要使用 Perl 从目录中获取相同日期的文件。我有在 Stack Overflow 问题中获取最后修改文件的解决方案How to find/cut for only the filename from an output of ls -lrt in Perl

但是如何获取ls -lrt 的输出以获取最新日期而不是时间?

【问题讨论】:

    标签: perl date ls


    【解决方案1】:

    这是 Perl 中 stat Function 的一个例子——解析 shell 命令的输出有点不可移植,效率很低,而且完全是错误的。

    my $mtime = (stat $file)[9];
    

    如果你真的很绝望,你当然应该使用split function

    my $mtimeAsString = join "" (split /\s+/, (`ls -lrt $file`)[0], 8)[5,6];
        # using only the first line of input
    

    请随意比较可读性……

    【讨论】:

    • 我正在使用 stat 本身。我使用 stat 如下: my $dir = ; opendir(my $DH, $dir) or die "Error opening $dir: $!";我的 %files = map { $_ => (stat("$dir/$_"))[9] } grep(! /^\.\.?$/, readdir($DH)); #print Dumper(%files);关闭($DH);
    【解决方案2】:

    如果您在 Perl 中使用 ls -lrt 获取文件的最后修改日期...您做错了。

    正确的解决方案是使用stat 函数,或包装它的File::Stat 模块。两者都会在一个文件中为您提供一堆数据,包括所有三个 utime。

    【讨论】:

      【解决方案3】:

      stat 是传统的。要么使用标准内置

      my $mtime = (stat $filename)[9];
      

      或者使用File::stat 方便的包装器,它提供了更难忘的访问

      use File::stat;
      
      my $mtime = stat($filename)->mtime;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-26
        • 2012-08-07
        • 1970-01-01
        • 2012-07-07
        • 2011-05-20
        • 1970-01-01
        • 2010-09-17
        相关资源
        最近更新 更多