2

我正在连接 SFTP 并使用 perl 下载文件。我想下载 1 小时前创建/修改的文件。

下面是代码片段。

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

1 回答 1

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;

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

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

我不知道mtime将采用哪种格式,所以我无法告诉您如何进行比较。文档、模块代码或测试中没有任何关于此的内容。

一个快速的谷歌建议 "YYYYMMDDhhmmss",但这可能不是正确的。去尝试一下。如果是 unix 时间戳,您可以将其与timeor进行比较time - 3600,但如果是字符串,则需要对其进行解析。Time::Piece是 Perl 核心附带的一个有用的模块,可以做到这一点。

于 2017-05-12T11:43:41.457 回答