我正在编写一个perl脚本,可以使用FTP以增量方式同步本地目录和远程目录。它检查每个文件的上次修改日期,并将其与一个远程文件进行比较。我使用以下代码通过FTP获取最后修改时间。
my $f = Net::FTP->new($config->{'host'}, Passive => 1, Debug => 0) || die "Couldn't ftp to $config->{'host'}: $@";
$f->mdtm($file);
如果本地机器和远程机器具有相同的时间和时区,它的效果很好,如果不是,我需要找到解决方法!
提前致谢
答案 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";