2017-05-12 36 views
2

我正在连接SFTP并使用perl下载文件。我想下载1小时前创建/修改的文件。如何使用perl在SFTP中查找文件的年龄?

以下是代码片段。

use strict; 
use Net::SFTP::Foreign; 
my $sftp_conn=Net::SFTP::Foreign->new('test.sftp.com',user=>'test',password=>'test123'); 
my $a1 = Net::SFTP::Foreign::Attributes->new(); 
my $a2 = $sftp_conn->stat('/inbox/tested.txt') or die "remote stat command failed: ".$sftp_conn->status; 
$sftp_conn->get("/inbox/tested.txt","/tmp")); 

在这里我想检查文件的年龄在什么时候它修改和计算在几小时内。

回答

4

您正处在正确的轨道上。在连接对象上调用->stat将返回一个Net::SFTP::Foreign::Attributes对象。然后你可以拨打->mtime来获得修改时间。

my $attr = $sftp_conn->stat('/inbox/tested.txt') 
    or die "remote stat command failed: ".$sftp_conn->status; 
print $attr->mtime; 

没有必要先创建一个空对象。您不需要以下行。您可能已从文档中的概要中复制它,但这只是为了显示使用该模块的不同方式。你可以删除它。

my $a1 = Net::SFTP::Foreign::Attributes->new(); 

我不知道mtime会以哪种方式,所以我不能告诉你怎么做比较。在文档中,模块代码或测试中没有任何关于此的内容。

快速谷歌suggested“YYYYMMDDhhmmss”,但这可能不是正确的。去尝试一下。如果它是一个unix时间戳,可以将其与timetime - 3600进行比较,但如果它是一个字符串,则需要解析它。 Time::Piece是一个有用的模块,与Perl核心来做到这一点。

+2

'mtime'和'atime'在Unix时间;从时代开始经过的秒数(UTC时间1970年1月1日00:00:00)。我会在解释它的文档中添加一个注释。 – salva

+0

@salva甜美,谢谢! :)很高兴能够直接从模块作者处听到。 – simbabque