【发布时间】: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中文件的最后修改日期?
我能够获取最后修改的文件,但我需要使用 Perl 从目录中获取相同日期的文件。我有在 Stack Overflow 问题中获取最后修改文件的解决方案How to find/cut for only the filename from an output of ls -lrt in Perl。
但是如何获取ls -lrt 的输出以获取最新日期而不是时间?
【问题讨论】:
这是 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
请随意比较可读性……
【讨论】:
如果您在 Perl 中使用 ls -lrt 获取文件的最后修改日期...您做错了。
正确的解决方案是使用stat 函数,或包装它的File::Stat 模块。两者都会在一个文件中为您提供一堆数据,包括所有三个 utime。
【讨论】:
stat 是传统的。要么使用标准内置
my $mtime = (stat $filename)[9];
或者使用File::stat 方便的包装器,它提供了更难忘的访问
use File::stat;
my $mtime = stat($filename)->mtime;
【讨论】: