我正在创建一个脚本,我需要获得我检查此线程How do I get a file's last modified time in Perl?的文件的上次修改日期
所以我使用下面的脚本来获得最后修改的,起初它是工作的,但当我尝试再次运行它,时间戳返回00:00 1970年1月1日。
为什么会发生这种情况?我如何才能获得正确的上次修改日期和时间?
my $dir = '/tmp';
opendir(DIR, $dir) or die $!;
@content=readdir(DIR);
foreach(@content)
{
next unless ($_ =~ m/\bfile.txt|file2.csv\b/);
my $epoch_timestamp = (stat($_))[9];
my $timestamp = localtime($epoch_timestamp);
$f_detail = $_ .' '.$timestamp;
print "$f_detail\n";
}
closedir(DIR);
exit 0;
当我试图运行perl时,我会得到这样的结果
- file.txt 1970年1月1日星期四00:00:00
- file2.csv 1970年1月1日星期四00:00:00
好的,最后一次更新,它现在工作了,我试着运行你给我的所有脚本,独立脚本。我找到了导致默认时间的原因,请看下面的脚本,我在我的程序中删除了它,它工作了,一开始没有注意到这个,对不起。但是,它仍然感觉很奇怪,因为我第一次运行它的时候确信它是工作的,但是现在它是工作的,所以是的,谢谢你们!
if (($month = ((localtime)[4] + 1)) < 10)
{
$month = '0' . $month;
}
if (($day = ((localtime)[3])) < 10)
{
$day = '0' . $day;
}
if (($year = ((localtime)[5]+1900)) >= 2000)
{
if (($year = $year - 2000) < 10)
{
$year = '0' . $year;
}
}
else
{
$year = $year - 1900;
}
$date = $month . $day . $year;
3条答案
按热度按时间2g32fytz1#
readdir返回没有完整路径的文件名。您需要手动在前面加上路径:
还请注意我是如何更改regex以匹配文件名的。
lf3rwulv2#
如果你有一个目录名,并且你想知道该目录中是否存在一些你已经知道名字的文件,那么就不需要
opendir
/readdir
--如果你事先不知道文件名,这会更有帮助。当你知道文件名时,你可以使用这两个部分建立一个路径,并在其上使用文件测试操作符/stat
/etc。示例执行:
taor4pac3#
以下演示代码利用glob获取目录中指定文件的修改时间。