【问题标题】:If file exists with wildcard?如果文件存在通配符?
【发布时间】:2019-01-26 03:31:23
【问题描述】:

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

所以基本上,无论 hh-mm-ss 是什么,我都需要查看文件 yyyy-MM-dd-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";
      }
 }

【问题讨论】:

  • 您尝试的while (&lt;&gt;) 有点特别:&lt;&gt; 从启动时提交给程序的文件中读取行。因此,如果您说script.pl file1 file2,那么while (&lt;&gt;) 程序中的script.pl 将从file1file2 依次读取。不是你想要的。 (一旦你opendir 然后你就可以按照暴民的回答显示。)
  • (更准确地说,&lt;&gt; 打开名称在@ARGV 中的文件并读取它们)
  • 嗨@georgetovrea 我相信你已经问过这个问题了,我想它已经回答了stackoverflow.com/questions/51832909/…

标签: perl file-exists


【解决方案1】:

看起来您正在尝试使用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";
}

【讨论】:

    猜你喜欢
    • 2018-08-12
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多