无法在我的目录中使用.tar.gz扩展名查找带有正则表达式的文件

时间:2013-08-13 06:40:29

标签: regex perl

当我尝试运行以下代码时出现错误,

我的要求是找到具有日期格式的文件例如:我的文件位于名称为

的目录中
    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“/; 出错了,

任何建议?

2 个答案:

答案 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);

感谢大家的时间