【发布时间】:2011-10-03 07:40:59
【问题描述】:
我正在运行一个 perl 脚本。在我的 perl 脚本中,我检查当前日期和文件夹名称(它也是日期格式,例如 11-12-07)。此 perl 脚本在检查当前日期和文件夹名称时自动运行。该文件夹是从其他服务器加载的 tar 文件夹。
所以,如果脚本与文件夹名称和当前日期匹配,基本上我需要运行脚本。
问题:有时,我曾经在第二天获取文件夹,而我的 perl 脚本仅检查当前日期。我得到的文件夹的名称是以前的日期(不是当前日期)。所以,我需要手动处理文件夹。我需要在我的 perl 脚本中自动化它。
请给我一些想法来实现它。
谢谢!!
参考代码:
my $tfilename = 'tarmd5.tar';
my $td = `date '+%y-%m-%d'`; # date in yy-mm-dd format
chomp ($td);
my $td2 = `date '+%Y%m%d'`; # date in yyyymmdd format
chomp ($td2);
#
# get directory from command line
$dir = shift;
leave("'$dir' is not a valid directory") unless (-d $dir);
if ($dir eq '.') {$dir = cwd();}
elsif ($dir !~ /^\//) {$dir = cwd()."/$dir";}
# print out the time
print scalar(localtime()),"\n";
######## This section unpacks transferred data ########
# go to directory for today and find *tar.gz files to copy
my $dday = "$dir/$td";
next unless (-d "$dday");
@gzfiles = glob("$dday/*tar.gz");
foreach $zf(@gzfiles) {
next if (($zf =~ /BMP/) || ($zf =~ /LG/) || ($zf =~ /MAP/) || ($zf =~ /STR/));
print "$zf\n";
($status,$message) = systemcall("/bin/cp $zf $fdir");
}
【问题讨论】:
-
如果我的理解是正确的,您想为匹配当前日期或未来日期的所有日期运行脚本吗?
-
实际上,我需要检查当前日期以及上一个日期。因为如果来晚了我会错过数据。
-
文件夹带有原始日期(当前日期或前一个日期)。如果它带有以前的日期,我会丢失数据,因为我的 perl 脚本只匹配当前日期。
-
嗨。请注意,我在代码中发现了一个错误并修复了它。 elsif ($dir != /^\//) 不正确。应该是 elsif ($dir !~ /^\//)
-
我使用的是以前的脚本,它显示“ elsif ($dir != /^\//) ”没有问题。无论如何,我没有什么疑问,并在评论部分发布。