文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>perl编程共享(一): 写文件和查找最近更新文件

perl编程共享(一): 写文件和查找最近更新文件

时间:2007-05-24  来源:ChangQingCao

    前段时间在Windows下做一些程序调度,由于bat脚本功能不是十分强大(本人擅长Shell脚本编程,用Shell写过两个3000多行的程序,常想在Windows下完成Linux下常做的一些自动化操作,觉得力不从心。),可能主要是因为我对bat脚本不熟悉,还没掌握它的一些强大功能。在bat编程找不着北后,我转向perl,在安装了active perl后,主要参考了active perl的document和一些其它资料,完成了许多我要实现的操作。     我对perl的理解和应用都只有不到一个月的时间,却深深体会到perl的强大,体会到perl的灵活。我遇到问题经常从网上找资料,其中大部分是论坛或博客里别人的经验共享,我自己从未贡献过什么,在CU和CSDN上也很少发帖回帖。从《perl编程共享》几篇开始,我将陆续共享自己的一些编程经验。当然,这些可能对一些人来说没有任何参考价值,甚至程序中错漏不少,但我想多交流还是有利于彼此的提高。
   下面的perl程序我是在windows下和Linux下都测试过可以正常运行的,注释也应该足够详细,暂时不作其他说明,如果有必要,以后再添加。   #!/bin/perl
use File::Path;
use File::stat qw(:FIELDS);
use POSIX qw(strftime);
use Cwd;
use File::Basename;
my $FULL_NAME = $0; # 带路径的当前执行文件名
my $IMPORT_HOME = dirname("$FULL_NAME"); # 程序所在目录
chdir("$IMPORT_HOME");
$IMPORT_HOME = cwd; # 将程序所在目录以绝对路径形式表示
my $LOG;   # 由create_log函数初始化,并在write_logs函数中使用
my $TODAY = strftime "%Y-%m-%d", localtime;
################################################################################
# 函数名:  write_logs
# 函数描述:  写日志
# 输入:   参数一:log_file 日志文件
#         参数二:content 日志内容
# 输出:   无
# 调用:  
# 被调用: get_latest_file
# 返回:
################################################################################
sub write_logs
{
   local ($log_file, $content)=@_;
   local $current_time = strftime "%Y-%m-%d %H:%M:%S", localtime;
   open(LOGF, ">>$log_file") || warn "Can not open file: $!";
   print LOGF "$current_time    $content";
   close(LOGF);
}
################################################################################
# 函数名:  get_latest_file
# 函数描述:  根据文件最后修改时间取指定目录最近24小时修改过的文件列表
# 输入:   参数一:src_dir 文件所在目录
# 输出:   无
# 调用:   write_logs
# 被调用:
# 返回:   最近24小时修改过的文件列表(必须用数组来存储返回值才能得到想要的结果)
################################################################################
sub get_latest_file
{
   local ($src_dir) = @_;
   local @all_files;
   local @latest_files;
   # 起始时间点为 00:00 January 1, 1970 GMT  (stat函数返回值决定)
   local $sec_since_1970 = 0; # 起始时间点到当前时间的秒数
   local $last_modify = 0;    # 起始时间点到文件最后修改时间的秒数
   local $sec_to_now = 0;     # 文件最后修改时间到当前时间的秒数
 
   if (! -d $src_dir)
   {
      write_logs($LOG, "错误:目录$src_dir不存在!\n");
      die  "错误:目录$src_dir不存在!\n";
   }
   opendir(DIR, "$src_dir") || warn "Can open dir $src_dir: $!";
   @all_files = grep(!/^\.\.?$/, readdir DIR);
   chdir($src_dir);
   # 创建临时文件,取其最后修改时间,即从起始时间点到当前时间秒数,后删除之
   open(SIGN, ">sign.$$");
   print SIGN "just a sign of importer.";
   close(SIGN);
   stat("sign.$$");
   $sec_since_1970 = $st_mtime;
   unlink("sign.$$");
   for ($i = 0; $i < @all_files; $i++)
   {
      stat($all_files[$i]);
      $last_modify = $st_mtime;
      $sec_to_now = $sec_since_1970 - $last_modify;
      if (-f $all_files[$i] && $sec_to_now <= 86400)
      {
         @latest_files = (@latest_files, $all_files[$i]);
      }
   }
   closedir(DIR);
   chdir($IMPORT_HOME);
 
   return @latest_files;
}
相关阅读 更多 +
排行榜 更多 +
疯狂兔子人乐园

疯狂兔子人乐园

休闲益智 下载
空中飞机飞行

空中飞机飞行

休闲益智 下载
小姐姐历险记2

小姐姐历险记2

休闲益智 下载