我需要从FTP服务器下载文件和目录列表。
我通过Net::FTP模块连接了FTP服务器。我已经使用cwd
方法更改了工作目录。
FTP中的当前工作目录包含文件和目录,我将这些列表放在一个数组中。从那个数组我需要识别目录和文件。在将文件和目录下载到本地之前,我需要将文件和目录与数组隔离开来。
如何设置下载文件的本地路径?
任何人都可以就上述问题提供解决方案/建议吗?
答案 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
可以是文件名或文件句柄。如果未指定,则该文件将存储在当前目录中,并具有与远程文件相同的叶名。