2013-09-22 17 views
0

我正在編寫一個perl腳本,該腳本可以使用FTP以增量方式與遠程目錄同步本地目錄。它會檢查每個文件的最後修改日期,並將其與一個遠程文件進行比較。我使用下面的代碼通過FTP獲取上次修改時間。如何通過FTP(perl)獲取遠程服務器的最後修改時間和時區

my $f = Net::FTP->new($config->{'host'}, Passive => 1, Debug => 0) || die "Couldn't ftp to $config->{'host'}: [email protected]"; 
$f->mdtm($file); 

它的偉大工程,如果本地計算機和遠程計算機具有相同的時間和時區,我需要一個解決辦法,如果他們都沒有!

在此先感謝

回答

1

據我所知,不存在一種方法只使用FTP命令,知道FTP服務器的時區設置...無論如何,如果你有寫權限,你可以嘗試在遠程FTP服務器上創建一個文件,然後 在其上做一個「ls」來查看日期/時間戳,具有新創建文件的時間戳,您可以計算您的本地時區和服務器時區之間的差異。

$f->touch('test.time') or die $f->message; #Creates new zero byte file 
$f->mdtm('test.time'); #Now you should have the local time of the FTP Server 
#Now you can compare with your local time and find the difference ... 

確保測試文件不試圖創建一個與touch命令之前就已存在。

+0

Aleroot嗨,你好,非常感謝您的時間。但是,對於遠程ftp時間,不是從$ f-> mdtm('test.time')獲得的修改時間嗎? 我們仍然無法瞭解遠程ftp服務器的時區是什麼,對嗎? 獲得的修改時間將會有7位或8位數字。 有什麼建議嗎? –

+0

@KasinathKottukkal您是否需要將時區作爲字符串(例如「歐洲/柏林」或「CEST」)或者只是作爲偏移量(「+0200」)? –

+0

@slavenRezic任何可能的方式。我不明白什麼可以從偏移推斷(「+0200」) –

1

從(stat文件[9])獲得的修改時間不取決於使用哪個時區服務器配置?

我在兩臺帶有不同timzones的服務器中幾乎同時觸及了一個示例文件。獲得的修改時間非常相似。只有最後4位數字是不同的。

Server 1 
-------- 
[email protected] [~/ftp_kasi]# touch file 
[email protected] [~/ftp_kasi]# perl mdtime.pl 
1380005862 
[email protected] [~/ftp_kasi]# date 
Tue Sep 24 02:59:19 EDT 2013 
[email protected] [~/ftp_kasi]# 

Server 2 
-------- 
[email protected] kasi]# touch file 
[[email protected] kasi]# perl mdtime.pl 
1380006066 
[[email protected] kasi]# date 
Tue Sep 24 12:38:45 IST 2013 
[[email protected] kasi]# 

[[email protected] kasi]# cat mdtime.pl 
#!/usr/local/cpanel/3rdparty/bin/perl 

$file = "file"; 
#open my $fh,'<',$file or die "Could not open file : $!\n"; 
#my $mdtime = (stat($fh))[9]; 

open (FILE, "file"); 
my $mdtime = (stat(FILE))[9]; 

print $mdtime."\n"; 
+0

在ftp服務器上執行'touch',而不是在本地執行。 –

相關問題