Мой сценарий на 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.
Я сделал некоторое чтение, и я думаю, мне нужно установить режим передачи в двоичный. Однако я действительно не уверен, как это сделать в моем скрипте. Кроме того, я не уверен, что это правильное решение.
Я очень благодарен за ваши мысли об этой ошибке. Если настройка режима передачи на двоичный будет исправлена эта проблема, можете ли вы показать мне, где я буду это делать?
У меня нет доступа к страницам man, но из прошлого опыта с 'ftp', сменив ваш параметр' asc' на 'bin', возможно, это сделает. Если нет, попробуйте просто «b». Удачи. – shellter
Оболочка права. Не устанавливать режим в ascii (удаление строки 'asc') - это хороший старт, еще лучше установить двоичный код (изменить' asc' на 'bin'). Также рассмотрите возможность использования модуля Net :: FTP (http://perldoc.perl.org/Net/FTP.html), который обеспечит намного лучшую обработку ошибок. –
Простое изменение asc на двоичный код полностью исправлено! Спасибо за помощь Гунтрам! – user2748540