当我试图运行以下代码时,我遇到了一些错误,
我的要求是找到日期格式为Ex的文件:我在一个目录中有名字的文件。
01-02-2013.tar.gz
02-02-2013.tar.gz
.....所以现在我想找一个01-02-2013的文件
下面是代码片段
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time-6*24*60*60);
$year += 1900;
$mon += 1;
$mday = '0'.$mday if ($mday<10);
$mon = '0'.$mon if ($mon<10);
my $date_folder =~ /"$mday-$mon-$year"/;
if (-e $date_folder){
unlink $date_folder or die ("Cannot Delete $date_folder : $!");
}在这里,我基本上是要在6天前(例如: 01-02-2013.tar.gz )找到当前日期的文件,SomeWhere I my $date_folder =~ /“$mday-$mon-$/”/;出错了,
有什么建议吗?
发布于 2013-08-13 06:45:23
只需删除引号:
my $date_folder =~ /$mday-$mon-$year/;它们只是正则表达式中的字面字符。
哦,对不起,我忽略了代码根本就没有意义!
因此,一些基本知识:如果您有类似于$date_folder =~ /$mday-$mon-$year/;的内容,则正则表达式与$date_folder的内容相匹配。如果没有设置,您将得到“在模式匹配(m/)中使用未初始化值$date_folder”。
$date_folder =~ /$mday-$mon-$year/;返回true或false。
有关更多细节,请参见:
在您的情况下,您需要遍历文件夹中的文件和循环中的文件,您需要用regex检查当前文件名,如果匹配,那么对文件做任何您想做的事情。
有关更多细节,请参见:
发布于 2013-08-13 09:13:31
最后这东西对我起作用了
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time-6*24*60*60);
$year += 1900;
$mon += 1;
$mday = '0'.$mday if ($mday<10);
$mon = '0'.$mon if ($mon<10);
opendir(DIR,"/home/DB_BKPS");
my @files = grep (/$mday-$mon-$year/,readdir(DIR));
print "@files\n";
foreach my $file (@files){
chomp($file);
unlink ($files[0]);
}
closedir(DIR);谢谢大家抽出时间
https://stackoverflow.com/questions/18202285
复制相似问题