如何使用Perl从FTP服务器下载目录和文件?

时间:2011-11-09 12:16:18

标签: perl ftp

  1. 我需要从FTP服务器下载文件和目录列表。 我通过Net::FTP模块连接了FTP服务器。我已经使用cwd方法更改了工作目录。 FTP中的当前工作目录包含文件和目录,我将这些列表放在一个数组中。从那个数组我需要识别目录和文件。在将文件和目录下载到本地之前,我需要将文件和目录与数组隔离开来。

  2. 如何设置下载文件的本地路径?

  3. 任何人都可以就上述问题提供解决方案/建议吗?

3 个答案:

答案 0 :(得分:3)

感谢您的所有建议和解决方案。最后我找到了解决方案。 使用Net :: FTP :: File模块,我们可以从我们要下载的ftp服务器的存储库中找到/隔离目录和文件。我分享了这些台词......

use Net::FTP;
use Net::FTP::File;

my $ftp=Net::FTP->new("hostname");
$ftp->login("username","password");
$ftp->cwd("/repository_name");
my @ftp_lists=$ftp->ls("/repository_name ");

foreach my $ftp_file(@ftp_lists){
push @ftp_dirs, $ftp_file if($ftp->isdir($ftp_file));
push @ftp_files, $ftp_file if($ftp->isfile($ftp_file));
}

答案 1 :(得分:2)

我知道你要求使用Net::FTP,但是我试图做同样的事情并最终使用wget作为来自Perl内部系统调用的命令来下载所有文件(实际上整个网站到我的本地驱动器,然后我(从另一个系统调用)将这些文件移动到我想要的位置,因为wget从根开始创建了一个文件夹结构,所以我不得不mv他们到别的地方。代码看起来像这样(您必须为您的设置测试它并获得正确的目录):

my $username = "tim";
my $password = "asdfghj";
my $domain   = "example.com";
my $get = `wget -P /var/www/$domain/ -m ftp://$username:$password\@$domain/httpdocs`;
my $mv  = `mv /var/www/$domain/httpdocs/* ../`;
my $del = `rm /var/www/$domain/httpdocs/`;

很抱歉,它不是Net::FTP,但如果您需要大量文件,它会更快,更少令人沮丧,您可以通过Net::FTP获得更多控制权...我是通过网络运行的应用程序,并使用它将整个网站从一个服务器移动到另一个服务器,并知道它的工作魅力:)

答案 2 :(得分:2)

为了识别文件和目录,您可能必须解析$ftp->ls的返回值。至于设置下载文件的路径,documentation表示:

  

get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] )

     

从服务器获取REMOTE_FILE并在本地存储。 LOCAL_FILE可以是文件名或文件句柄。如果未指定,则该文件将存储在当前目录中,并具有与远程文件相同的叶名。