2014-01-23 1 views
1

Мой сценарий на 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. 

Я сделал некоторое чтение, и я думаю, мне нужно установить режим передачи в двоичный. Однако я действительно не уверен, как это сделать в моем скрипте. Кроме того, я не уверен, что это правильное решение.

Я очень благодарен за ваши мысли об этой ошибке. Если настройка режима передачи на двоичный будет исправлена ​​эта проблема, можете ли вы показать мне, где я буду это делать?

+0

У меня нет доступа к страницам man, но из прошлого опыта с 'ftp', сменив ваш параметр' asc' на 'bin', возможно, это сделает. Если нет, попробуйте просто «b». Удачи. – shellter

+2

Оболочка права. Не устанавливать режим в ascii (удаление строки 'asc') - это хороший старт, еще лучше установить двоичный код (изменить' asc' на 'bin'). Также рассмотрите возможность использования модуля Net :: FTP (http://perldoc.perl.org/Net/FTP.html), который обеспечит намного лучшую обработку ошибок. –

+0

Простое изменение asc на двоичный код полностью исправлено! Спасибо за помощь Гунтрам! – user2748540

ответ

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