2017-05-06 116 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; 
} 
相關問題