通过perl在不同文件夹中FTP多个文件

时间:2017-05-06 17:58:00

标签: perl ftp

我正在尝试使用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;

2 个答案:

答案 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");