首页 > 解决方案 > 如果文件存在通配符?

问题描述

我需要验证文件是否存在,但文件名发生了变化。由于附加时间(hh-mm-ss),至少文件名的最后一部分确实如此。

所以基本上,我需要查看文件 yyyy-MM-dd-hh-mm-ss 是否存在,而不管 hh-mm-ss 是什么。我正在尝试进行通配符搜索,但找不到该文件。例如,我想检查文件是否/home/httpd/doc/$user/$year/2018-08-20-*存在。

是否可以*用于文件名变量?还是其他更好的方法?

我正在尝试检查文件是否存在,但使用通配符。这是我的代码:

opendir(DIR, "/home/httpd/doc/$user/2018") || die "Unable to open log/location";
while(<>){
    if($_ =~ /\/2018-08-20-\d+-\d+-\d+/) {
        print "file exists\n";
      }
 }

标签: perlfile-exists

解决方案


看起来您正在尝试使用opendir-readdir模式,它看起来像

opendir(DIR, "/home/httpd/doc/$user/2018") || die "Unable to open log/location";
foreach my $file (readdir DIR) {
    if ($file =~ /\/2018-08-20-\d+-\d+-\d+/) {
        print "file exists\n";
    }
}
closedir DIR;

但更简洁的方法(有更多的边缘情况,但可能适用于你的情况)是使用glob

if (glob("/home/httpd/doc/$user/2018/2018-08-20-*")) {
    print "file exists\n";
}

推荐阅读