perl中FTP的使用

#!/usr/bin/perl

#-----------------------------------------------------#
# 
# description : create and ftp subchange state file
# author      : wqq
# date        : 2012-04-30
#
#-----------------------------------------------------#
#use warnings;
use strict;
use Net::FTP;

our ($day,$mon,$yea) = (localtime(time))[3..5];
our $current_date = sprintf "%04s%02d%02d",$yea+1900,$mon+1,$day;

our $source_subchange_dir = "../backup/$current_date";
our $source_file_count = 3;
our $target_subchange_file = "ocs_subchange.unl";
our $ftp_ip = "10.2.11.52";
our $ftp_username = "mid";
our $ftp_password = "mid";
our $local_file = $target_subchange_file;
our $desc_file = "ocs_subchange.unl";
our $desc_dir = "/home/mid/test";

our %hash_state;
our %hash_time;

sub current_datetime()
{
    my($sec,$min,$hou,$day,$mon,$yea) = (localtime(time))[0..5];
    my $date_time = sprintf "%04s-%02d-%02d %02d:%02d:%02d",$yea+1900,$mon+1,$day,$hou,$min,$sec;
    return $date_time;
}

sub info()
{
  print "please check parameter!\nusage:\n\t./subchange.pl\n";
}

sub logfile()
{
  my $line = shift;
  my $exitflag = shift;
  open (LOG_FILE,">> $source_subchange_dir/log_$current_date.unl") or die ">>>>>Can't read log file $source_subchange_dir/log_$current_date.unl: $!\nPlease check...\n";
  print LOG_FILE "[".&current_datetime()."]:$line\n";
  close LOG_FILE;
  if($exitflag == 1)
  {
    exit;  
  }
}

sub check_file()
{
  my $count_file;
  my @count_file;
  if(! -d $source_subchange_dir)
  {
    &logfile(">>>>>The document $source_subchange_dir not exists!",1); 
  }else{
    $count_file = `ls $source_subchange_dir/ocs_subchange* | wc -l`;
    @count_file = `ls $source_subchange_dir/ocs_subchange*`;
    if($source_file_count != $count_file)
    {
      chomp($count_file);
      &logfile(">>>>>Current source file count: $count_file",0);
      foreach my $file (@count_file)
      {
        chomp($file);
        &logfile(">>>>>Source file: [$file] ",0);
      }
      &logfile(">>>>>Please check source file! need source file count:[$source_file_count]\n",1); 
    }
  } 
  
  foreach my $file (@count_file)
  {
    chomp($file);
    &logfile("Source file: [$file] ",0);
  }
}

#----------read userdb_ocs_subchangelog file----------#
sub read_ocs_subchangelog_file()
{
  my $line;
  my @arr;
  my $file;
  
  opendir(DIR, $source_subchange_dir) || &logfile(">>>>>Open directory $source_subchange_dir failed!",1);	
	while ($file = readdir(DIR))
	{
	  if($file =~ /^ocs_subchange/)
	  {
      my ($line);
  		open (FILE, "$source_subchange_dir/$file") || &logfile(">>>>>Can't read source file $file: $!\nPlease check...",1);
      while($line=<FILE>)
      {
        chomp($line);
        @arr = split(/\|/,$line,-1);
        chomp($arr[3]);
        
        if(exists $hash_state{$arr[0]})
        {
          if($hash_time{$arr[0]} le $arr[1])
          {
            $hash_state{$arr[0]}= $arr[3];
            $hash_time{$arr[0]}= $arr[1];  
          }
        }else{
          $hash_state{$arr[0]}= $arr[3];  
          $hash_time{$arr[0]}= $arr[1];
        }
      }
      close FILE;
    }  
  }
  close DIR;
}

#----------create subchange file----------#
sub create_subchange_file()
{
  my $isdn;
  my @arr;
  
  open TARGET_SUBCHANGE, ">> $target_subchange_file" or &logfile(">>>>>Can't read target file $target_subchange_file: $!\nPlease check...",1);
  foreach $isdn (keys %hash_state)
  {
    if(substr($hash_state{$isdn},0,1)==1)
    {
      print TARGET_SUBCHANGE "MOD LCK: ISDN=\"$isdn\", IC=FALSE, OC=FALSE, GPRSLOCK=FALSE;\n"; 
    }else{
      print TARGET_SUBCHANGE "MOD LCK: ISDN=\"$isdn\", IC=TRUE, OC=TRUE, GPRSLOCK=TRUE;\n";
    }
  }
  close TARGET_SUBCHANGE; 
}


sub ftp_subchange_file()
{

  my $ftp = Net::FTP->new($ftp_ip) or &logfile(">>>>>Can't connect to HLR [$ftp_ip].",1);
  
  &logfile("Begin input username:[$ftp_username] and password:[$ftp_password].",0);
  $ftp->login($ftp_username,$ftp_password) or &logfile(">>>>>Can't login [$ftp_ip], username or password is error!",1);
  
  $ftp->ascii();
  
  &logfile("Begin change dir to [$desc_dir].",0);
  $ftp->cwd($desc_dir) or &logfile(">>>>>Can't change dir to [$desc_dir], dir is error!",1);  

  my @file=$ftp->ls($desc_file);
  if($file[0] eq "$desc_file")
  {
    $ftp->delete($desc_file);
    &logfile("[$desc_dir/$desc_file] The file exists in the HLR:[$ftp_ip], delete it.",0);  
  }else{
    &logfile("[$desc_dir/$desc_file] The file not exists in the HLR:[$ftp_ip].",0);  
  }
  
  &logfile("Begin to put the file in the HLR:[$desc_dir/$desc_file]",0);
  $ftp->put($local_file,$desc_file) or &logfile(">>>>>Can't put the file in the HLR:[$desc_file]",1);
  
  $ftp->quit;  
}


#----------main----------#
if(@ARGV != 0)
{
  &info();  
}
else
{ 
  system("rm -rf $target_subchange_file $source_subchange_dir/log_$current_date.unl");
  
  &logfile("Begin check source file.",0);
  &check_file();
  &logfile("Check source file completed!\n",0);
  
  &logfile("Begin create subchange final file.",0);
  &read_ocs_subchangelog_file();
  &create_subchange_file();
  &logfile("Create subchange final file completed!\n");
  
  &logfile("Begin connect to HLR [$ftp_ip].",0);
  &ftp_subchange_file();
  &logfile("Ftp subchange final file completed!\n");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值