如何使用perl从FTP服务器下载文件夹/目录?

时间:2011-11-23 07:44:28

标签: perl

我在FTP serever中有一系列文件夹。例如,

@ftp_dirs=('/Tarun/Netdomais','/Tarun/Testing','/Tarun/Tested_files')

我需要将数组中的每个文件夹从FTP服务器下载到本地文件夹(c:\ ftp_downloaded)。

我写了以下几行

use strict;
use Net::FTP;


my $ftp=Net::FTP->new("hostname",Debug=>0);
$ftp->login("user_name","password");
$ftp->cwd("/Tarun");

my @ftp_dirs=('/Tarun/Netdomais','/Tarun/Testing','/Tarun/Tested_files');
my $local='c:\ftp_downloaded';

foreach my $ftp_folder(@ftp_dirs){
  $ftp->get($ftp_folder,$local);
}

以上代码无效。因为get方法仅适用于从ftp而不是文件夹下载文件。

是否可以从ftp下载文件夹?

2 个答案:

答案 0 :(得分:5)

首先,使用以下命令启动所有perl脚本:

use strict;
use warnings;

其次,你错过了一行;

my @ftp_dirs=('/Tarun/Netdomais','/Tarun/Testing','/Tarun/Tested_files')

第三,我认为您可以尝试使用commandNet::FTP继承的Net::Cmd方法并发出ftp mget命令,或模拟mget用类似的东西:

$ftp->get($_) for grep { 1 } $ftp->ls;

答案 1 :(得分:4)

只需使用Net::FTP::Recursive

示例:

use Net::FTP::Recursive;

$ftp = Net::FTP::Recursive->new("some.host.name", Debug => 0);
$ftp->login("anonymous",'me@here.there');
$ftp->cwd('/pub');
$ftp->rget( ParseSub => \&yoursub );
$ftp->quit;