Im beginner. Я написал скрипт perl, который делает следующее:Perl sftp загружает с Net :: SFTP :: Foreign
-Создайте каталог под «/ x01/abcd/abc_logs/abcd_Logs» на текущую дату в формате «YYYYMMDD», если он еще не был создан. i.e: если сценарий запускается на «01st jan 2013», каталог под названием «20130101» будет создан по указанному пути. Поэтому всякий раз, когда необходимо проверять журналы, всегда ищите каталог по текущей дате.
-Проверьте, были ли файлы журнала уже загружены ранее в тот же день, и если журналы (журналы) не будут загружены в каталог TODAY.
У меня трудное время, придумывая решение для печати сообщения, когда в доле нет файлов. Это, конечно, когда пользователь указывает 2 или более файлов, которых нет в общей папке. Я знаю, что это происходит, потому что в «sub get_LOGS» есть выражение «die». Я просто не могу понять, как вернуть сообщение, когда все файлы, которые я указываю, не находятся в общей папке.
использование этого сценария заключается в следующем
./abc_logs ....
Ниже приведен сценарий.
my $LOGS_LOCAL_PATH = "/x02/abc/abcba2/";
chomp $LOGS_LOCAL_PATH;
my $LOGS_REM_PATH = "/x01/INT/abc/vabc2/";
chomp $LOGS_REM_PATH;
my $TODAY = `date +%Y%m%d`;
chomp $TODAY;
my @GETLOOP = @ARGV;
unless ($#ARGV >= 0) {
print "\nUsage: gtp_logs.pl <file1> <file2> <file3>.....<file(n)>\n\n";
exit;
}
system("clear");
unless (-d "$LOGS_LOCAL_PATH"."$TODAY") {
print "Directory \"$TODAY\" doesn't exist. So creating the directory..!\n";
print "OK..Done.....!\n\n";
system("mkdir $LOGS_LOCAL_PATH/$TODAY");
}
else {
print "Directory already exists. Logs will be downloaded to ==> \"$LOGS_LOCAL_PATH$TODAY\".....!\n\n";
}
# if_DOWNLOADED($LOGS_LOCAL_PATH,$TODAY,@GETLOOP);
chdir("$LOGS_LOCAL_PATH"."$TODAY") || die "cannot cd to ($!)";
foreach my $GETL (@GETLOOP) {
my $is_downloaded = if_DOWNLOADED($LOGS_LOCAL_PATH,$TODAY,$GETL);
if(!$is_downloaded)
{
get_LOGS("172.25.70.221","abc","abc2","/x01/INT/abc",$GETL);
print "File \"$GETL\" downloaded to ==> \"$LOGS_LOCAL_PATH$TODAY\"\n\n";
}
else
{
print "File \"$GETL\" has already been Downloaded to ==> \"$LOGS_LOCAL_PATH$TODAY\"\n\n";
}
}
sub get_LOGS {
my $LOG_HOST = shift;
my $REM_USER = shift;
my $REM_PASSW = shift;
my $REM_PATH = shift;
my $REM_FILE = shift;
print "Connecting to the sftp share! Please wait....!\n";
my $sftp = Net::SFTP::Foreign->new($LOG_HOST, user => $REM_USER, password => $REM_PASSW);
$sftp->setcwd($REM_PATH) or die "unable to change cwd: " . $sftp->error;
print "OK. On the share! Downloading the file \"$REM_FILE\"...................!\n\n\n\n";
$sftp->error and die "Problem connecting to the share...!!!! " . $sftp->error;
$sftp->get($REM_FILE) or die "File does not seem to be present on the remote share. Please re-request..!!!" . $sftp->error;
return $REM_FILE;
}
sub if_DOWNLOADED {
my $DWD_FILE_PATH = shift;
my $DWD_DIR = shift;
my $DWD_FILE = shift;
if (-e "$DWD_FILE_PATH/$DWD_DIR/$DWD_FILE")
{
return 1;
}
else
{
return 0;
}
}
Возможно, кто-нибудь поможет мне найти решение этого вопроса? Попробуйте использовать тот же скрипт и измените его.
/V
Пожалуйста, не используйте ', если ... else' строительство. – Toto