2017-05-12 34 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