我正在尝试使用ftp脚本,该脚本在同一连接中的不同目录中发送文件,下面的脚本仅来自一个文件夹中的FTP文件。
#!/usr/bin/perl
use warnings;
use strict;
use Net::FTP;
use Cwd;
my $server = "HOST_NAME"
my $username = "USERNAME";
my $pass = "PASSWORD";
my $ftp;
$ftp = Net::FTP->new( $server, Debug => 1 ) or die $@;
$ftp->login( $username, $pass ) or die $ftp->login failed;
my @transferFileList = glob "Filename*.log";
$ftp->cwd('somefolder') or die $ftp->message;
$ftp->binary();
for (@transferFileList){
$ftp->put(cwd . "\\$_") or die $ftp->message;
}
$ftp->quit or die $ftp->message;
答案 0 :(得分:2)
我会写一个答案,因为这似乎是解释你问题的唯一方法,尽管你似乎已经知道如何使用$ftp->cwd
有两种方式。
您可以在每次转移前使用$ftp->cwd('someotherfolder')
来更改文件的存储位置
请记住,如果每次都使用相对路径,那么您将深入了解服务器的文件结构。您可能希望使用$ftp->cwd('../someotherfolder')
上升到一个级别并返回到与前一个级别相同的姐妹文件夹,或者您可以使用像$ftp->cwd('/pub/someotherfolder')
这样的绝对路径,它不能被误解为< / p>
您可以将第二个参数传递给$ftp->put
,该参数指定创建的远程文件的路径和文件名
如果您选择此选项,则无需拨打$ftp->cwd
如果您要存储文件的目录可能不存在,那么您需要在转移之前使用$ftp->mkdir('newfolder')
由于更改(远程)工作目录的方法相当简单,这里有一些代码演示了第二个选项。它假设您要将每个日志文件放入一个名为/pub/dir01
,/pub/dir02
等新文件夹中。
my $ftp = Net::FTP->new( $server, Debug => 1 ) or die $@;
$ftp->login( $username, $pass ) or die $ftp->message;
$ftp->binary();
my $dir = 'dir01';
for my $file ( glob 'Filename*.log' ) {
my $abs_dir = '/pub/' . $dir++;
$ftp->mkdir($abs_dir);
$ftp->put($file, "$abs_dir/$file") or die $ftp->message;
}
答案 1 :(得分:0)
如果您的文件夹在根文件夹下:
$ftp->cwd("test");
如果您的文件夹在 root\test
文件夹下:
$ftp->cwd("test\test1");