如何通过FTP(perl)获取远程服务器的最后修改时间和时区

时间:2013-09-22 06:16:00

标签: linux perl ftp cgi sync

我正在编写一个perl脚本,可以使用FTP以增量方式同步本地目录和远程目录。它检查每个文件的上次修改日期,并将其与一个远程文件进行比较。我使用以下代码通过FTP获取最后修改时间。

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

如果本地机器和远程机器具有相同的时间和时区,它的效果很好,如果不是,我需要找到解决方法!

提前致谢

2 个答案:

答案 0 :(得分: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命令创建测试文件之前,请确保测试文件不存在。

答案 1 :(得分:1)

从(stat file [9])获得的修改时间是否不依赖于使用?

配置的时区服务器

我几乎同时在具有不同timzones的两台服务器中触摸了一个示例文件。获得的修改时间非常相似。只有最后4位数字不相同。

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

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

 [root@ffVM32 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";