这里使用的Net::FTP模块,一般安装的perl都会自带该模块,查看perl是否安装某模块使用命令:perldoc Net::FTP,如果出现文档说明,则表示该模块已安装,如果出现:No documentation found for 则表明该模块未安装,perl安装模块可以参考该文章:[添加链接描述](https://blog.csdn.net/czz1141979570/article/details/78697219)
一、相关方法介绍
这里首先介绍如何连接,以及部分方法,后面会有整个代码示例;
创建ftp实例:`$ftp=Net::FTP->new(127.0.0.1,Port=>21,Timeout => 300,Passive=>1,Debug=>0);`
参数说明,第一个为需要连接的ftp地址,Port指定连接端口号,Timeout 设置超时时长,Passive则是设置ftp连接时指定主被动模式,参数值0为主动模式,非零值为被动模式,关于ftp主被动模式可自行百度;
ftp连接: $ftp->login($username,$password)
;
进入目标主机路径:$ftp->cwd("/pub")
;
展示目标主机上当前所在路径:$ftp->pwd()
;
采用二进制传输文件:$ftp->binary()
;
ls目标主机上的文件:my @file_list=$ftp->ls($filename)
;
删除目标主机上文件:$ftp->delete($filename)
;
获取目标主机文件大小:$sourceSize=$ftp->size($filename)
;
删除目标主机路径(得确保有权限):$ftp->rmdir("/pub/dir")
;
创建目标主机路径(得确保有权限):$ftp->mkdir("/pub/dir",“true”)
;如果最后加参数“true”,相当于 mkdir -p;
获取目标主机文件:$ftp->get($filename,$output_dir."/".$filename)
,参数说明,第一个参数是要获取的文件名,第二个是指定落地文件名,如果是文件名不想改变,可以采用该方式,要下载的路径拼接原先文件名即可 $output_dir."/".$filename
;
上传文件:$ftp->put("/home/cw/aaa.txt","aaa.txt")
,第一个参数为在本地要上传的文件,第二个参数为上传到目标主机生成的文件名;
更多方法介绍可以看(https://perldoc.perl.org/Net/FTP.html)
二、perl连接ftp实现文件下载示例
#!/usr/bin/perl
use Net::FTP;
sub ftpGetFile
{
##用户名
$username="test";
##密码
$password="test";
##端口
$port="21";
##ip
$host="127.0.0.1";
##文件名
$file_name="*";
##本地获取文件目录
$dst_dir="/localedir";
##目标主机路径
$input_dir="/";
##判断路径是否存在,不存在则创建
unless(-e $dst_dir){
mkdir $dst_dir or die "[ERRO]can't create directory $dst_dir,$! \n";
}
##创建ftp实例Passive 指定主被动模式,参数值0为主动模式,非零值为被动模式
$ftp=Net::FTP->new($host,Port=>$port,Timeout => 300,Passive=>1,Debug=>0) or die "[ERRO] can't connect: $@ \n";
##用户密码登录
$ftp->login($username,$password