设置二进制传输模式

时间:2014-01-23 18:26:24

标签: linux perl ftp file-transfer

下面的My Perl脚本非常基本。它会复制位于一台服务器上的.zip文件并将其传输到另一台服务器。

#!/usr/bin/perl -w

use strict;
use warnings;
my $remotehost ="XXXXXX";
my $remotepath = "/USA/Fusion_Keyword_Reports";
my $remoteuser = "XXXXXXX";
my $remotepass = "XXXXXXX";

my $inputfile ="/fs/fs01/crmdata/SYWR/AAM/list8.txt";
my $remotefile1;
#my $DIR="/fs/fs01/crmdata/SYWR/AAM";
open (FILEIN, "<", $inputfile) or die "can't open list8 file";


while (my $line =<FILEIN>) {
if ($line =~ m /Keywords-Report(.*?)/i && $line !~ m/Keywords-Report-loopback/i) {
  print $line;
$remotefile1 =$line;
last;
}
}
close FILEIN;

print "remotefile $remotefile1\n";


my $DIR1="/fs/fs01/crmdata/SYWR/AAM/$remotefile1";

my $cmd= "ftp -in";


my $ftp_command  = "open $remotehost
                  user $remoteuser $remotepass
                  cd $remotepath
                  asc
                  get $remotefile1
                   bye
                ";

  open (CMD, "|$cmd");
  print CMD $ftp_command;
close (CMD);


exit(0);

当我运行脚本时,它确实有效但我收到错误,因此传输的文件已损坏。

226 Transfer complete.
WARNING! 40682 bare linefeeds received in ASCII mode.
File may not have transferred correctly.

我做了一些阅读,我想我需要将传输模式设置为二进制。但是我真的不确定如何在我的脚本中这样做。此外,我不确定这是否是正确的解决方案。

我非常感谢您对此错误的看法。如果将传输模式设置为二进制将解决此问题,请您告诉我我会在哪里做到这一点?

1 个答案:

答案 0 :(得分:2)

my $ftp_command  = "open $remotehost
              user $remoteuser $remotepass
              cd $remotepath
              binary
              get $remotefile1
               bye
            ";