FTP自动上传文件的perl脚本以及配置文件

2019-10-01 15:16:49王冬梅

if($g_nIsAllWAVsFile_UploadSuccess < 0 || $g_nUploadSuccess < 0)
{
 $logfilename = 'Upload_Fail_'.shortTimeString(time).'.log';
 $log_cnt = 0;
 LOG("");
 LOG("FTP自动上传文件 Version 0.1");
 LOG("");
 LOG("上传结果:失败。失败原因:$g_strLastError。n花费:$span 秒, 总共处理了 $total_files 个文件, 其中 $processed_files 上传成功, 跳过了 $skipped_files 个文件。");
 LOG("");
 closeLogfile();
}
##---------------------------#
## 以下是子函数体的定义
##----------------------------##
##
## 函数名称:processFiles
## 功能:  
##           得到指定文件夹下的所有文件以及子文件夹,然后依次处理它们。
##
## 程序员:  Uwe Keim
##
## 历史记录:
## 编号     日期       作者    备注
## 1        2000       Uwe Keim

##
##----------------------##
sub processFiles
{
 my $srcdir = fsToBs($File::Find::dir);
 my $srcpath = fsToBs($File::Find::name);
 my $base = fsToBs($File::Find::topdir);
 foreach my $exclude (@wc_exclude) {
  if ( index($srcpath, $exclude)>-1 ) {
   $File::Find::prune = 1 if -d $srcpath;
   return;
  }
 }
 # no DIRECT processing of directories.
 if ( -d $srcpath ) {
  return;
 }
 my $dstdir = $srcdir;
 my $dstpath = $srcpath;
 $dstdir =~ s{Q$baseE}{$ftp_dir}is;
 $dstpath =~ s{Q$baseE}{$ftp_dir}is;
 $dstdir = bsToFs($dstdir);
 $dstpath = bsToFs($dstpath);
 processFile($srcpath,$dstpath,$dstdir);
}
sub processFile
{
 my ($src,$dst,$dstdir) = @_;
 $total_files++;
 LOG("正在处理文件 $total_files "$src"...");
 # --------------------
 # check time.
 my $need_upload = 0;
 # create time.
 my $t1 = $lookup{$src};
 my $t2 = timeString(stat($src)->mtime);
 if ( not defined $t1 ) {
  $lookup{$src} = $t2;
  $need_upload = 1;
 } else {
  my $delta_sec = calcDeltaSeconds($t1,$t2);
  $need_upload = 1 if $delta_sec>5;     # 5 seconds as tolerance.
 }
 # --------------------
 if ( $need_upload>0 ) {
  $processed_files++;
  LOG("正在上传文件:从源 "$src" 到目标 "$dst"...");
  $ftp->mkdir($dstdir,1);
  $ftp->put($src, $dst) or  $g_nIsAllWAVsFile_UploadSuccess=-1;
  if($g_nIsAllWAVsFile_UploadSuccess < 0)
  {
   LOG("不能上传文件:从源 "$src" 到目标 "$dst" (dst-dir: "$dstdir")。n");
   if($@)
   {
    LOG("错误原因是:$@n");