0

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

我的要求是找到具有日期格式的文件 例如:我在一个目录中有文件名

    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" /; 出错了,

有什么建议么 ?

4

2 回答 2

1

只需删除引号:

my $date_folder =~ /$mday-$mon-$year/;

它们只是正则表达式中的文字字符。

哦,哦,哦,对不起,我忽略了代码根本没有意义!

所以,一些基础知识:如果你有类似的东西$date_folder =~ /$mday-$mon-$year/;,你的正则表达式与$date_folder. 如果未设置,您将获得“在模式匹配 (m//) 中使用未初始化的值 $date_folder”。
$date_folder =~ /$mday-$mon-$year/;返回真或假。

有关更多详细信息,请参阅:

在您的情况下,您需要遍历文件夹中的文件,并且在循环内您需要使用正则表达式检查当前文件名,如果匹配,则对文件执行任何您想要的操作。

有关更多详细信息,请参阅:

于 2013-08-13T06:45:23.243 回答
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);

谢谢大家的时间

于 2013-08-13T09:13:31.337 回答