2011-03-31 156 views
1

我正在使用Net::FTP::Recursive将我服务器上的所有文件每天下载到本地主机。有没有办法检查本地主机上的文件存在b/f我下载了一切?我想跳过我已经下载的文件。FTP递归...如果我已经有文件,如何跳过它?

my $host = "host"; my $user = "u"; my $password = "p"; 
my$f = Net::FTP::Recursive->new($host, Debug => 0, Passive => 0); 
    $f->login($user,$password); 
    $f->rget();  
    $f->quit; 

回答

2

您可以做的是,在初始化FTP连接之前,获取本地计算机上的文件列表。然后将它们一起放入正则表达式中,并使用rgetOmitFiles属性省略本地计算机上的文件。

当然,这并不处理在远程计算机上修改了文件但没有修改的情况。或者您的传输被中断并且您只有一半文件的情况。

您应该考虑使用rsync来代替,无论是使用命令行程序还是File::Rsync module

4

Net::FTP::Recursiverget方法接受ParseSub => sub { ... }论点,即决定哪个所述远程服务器上的文件应该被检索。

看看在parse_files方法the source code - 那就是rget使用默认的功能 - 看你如何使用它的修改版本,以排除已经在你的本地主机上存在的文件。

+0

谢谢。他们似乎没有任何东西可以检查文件是否存在于本地主机上......它只是在远程主机上执行正则表达式 – 2011-03-31 19:18:53

+0

正确的是,您必须实现自己的'my_parse_files'例程来检查您的本地主机的文件。 – mob 2011-03-31 19:55:05

相关问题