当我尝试运行以下代码时出现错误,
我的要求是找到具有日期格式的文件例如:我的文件位于名称为
的目录中 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我觉得我的$ date_folder =〜/“$ mday- $ mon- $ year“/; 出错了,
任何建议?
答案 0 :(得分:1)
只需删除引号:
my $date_folder =~ /$mday-$mon-$year/;
它们只是正则表达式中的文字字符。
哦,哦,对不起,我忽略了代码完全没有意义!
所以,一些基础知识:如果你有$date_folder =~ /$mday-$mon-$year/;
之类的东西,你的正则表达式会与$date_folder
的内容相匹配。如果未设置此项,则会获得“在模式匹配中使用未初始化的值$ date_folder(m //)”。
$date_folder =~ /$mday-$mon-$year/;
返回true或false。
有关详细信息,请参阅:
在你的情况下,你需要在文件夹和循环内循环你的文件,你需要用你的正则表达式检查当前的文件名,如果匹配,那么你可以用文件做任何你想做的事。
有关详细信息,请参阅:
答案 1 :(得分:1)
最后这件事对我有用
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);
感谢大家的时间