2017-05-06 71 views
-1

我正在尝试一个ftp脚本,该脚本在同一连接内的不同目录中发送文件,下面的脚本是从仅一个文件夹的FTP文件。通过Perl在不同文件夹中的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 [email protected]; 

$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

*同一条连接中发送不同的目录中的文件,* - 与FTP每个新文件传输一个新的TCP连接。您可能是指相同的FTP会话或“从同一控制连接中发起的*”。但不清楚你的实际问题是什么 - 你不知道如何改变Perl内的文件夹?因此,请说明您实际尝试解决问题的方式以及您的实际问题所在。 –

+0

我试图从相同的FTP会话 –

+0

好吧,但你没有解释是什么问题。请给我们一些例子。 (顺便说一下,我已经删除了第二个问题,因为它与您的其他帖子无关,需要单独提问。) – Borodin

回答

2

嗯,我会写一个答案,因为这似乎是解释你的问题的唯一途径,但它似乎你已经知道如何使用$ftp->cwd

有两种方法。

  • 您可以使用$ftp->cwd('someotherfolder')每次传送前更改该文件存储

    请记住,如果你使用相对路径每一次,那么你将永远跳水深入到服务器的文件结构。您可能需要使用$ftp->cwd('../someotherfolder')上去的水平,并回落到一姐的文件夹在同一水平上与前一个,或者你可以使用像$ftp->cwd('/pub/someotherfolder')绝对路径,不能被曲解

  • 你可以通过一个第二个参数$ftp->put,它指定为创建

    如果选择此选项,然后$ftp->cwd没有调用是必要的远程文件的路径和文件名

如果要存储的目录文件可能不会存在,那么在转移之前您需要使用$ftp->mkdir('newfolder')

由于更改(远程)工作目录的方法非常简单,下面是一些演示第二个选项的代码。它假定你想要把每个日志文件到一个新的文件夹,名为/pub/dir01/pub/dir02

my $ftp = Net::FTP->new($server, Debug => 1) or die [email protected]; 
$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; 
} 
相关问题