我正在使用Net::FTP::Recursive每天将我服务器上的所有文件下载到localhost。有没有办法在localhost b / f检查文件是否存在我下载了所有内容?我想跳过我已下载的文件。
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;
答案 0 :(得分:4)
rget
中的Net::FTP::Recursive
方法采用ParseSub => sub { ... }
参数来决定应检索远程服务器上的哪些文件。
查看the source code中的parse_files
方法 - 这是rget
使用的默认函数 - 并了解如何使用它的修改版本来排除文件已存在于您当地的主机上。
答案 1 :(得分:2)
在初始化FTP连接之前,您可以做的是获取本地计算机上的文件列表。然后将它们组合成一个正则表达式,并使用OmitFiles
的{{1}}属性来省略本地计算机上的文件。
当然,这不能处理在远程计算机上修改文件而您没有修改的情况。或者您的转移被中断并且您只有半个文件的情况。
您应该考虑使用rget
代替,无论是使用命令行程序还是使用File::Rsync
module。