如果文件存在通配符?

Posted

技术标签:

【中文标题】如果文件存在通配符?【英文标题】: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 我相信你已经问过这个问题了,我想它已经回答了***.com/questions/51832909/… 【参考方案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";

【讨论】:

以上是关于如果文件存在通配符?的主要内容,如果未能解决你的问题,请参考以下文章

有 301 通配符匹配吗?

如何在 Erlang 中使用通配符 * 检查文件是不是存在?

将通配符文件名从主包复制到文档?

GNU make 中的递归通配符?

wildcard ,notdir ,patsubst ,obj=$(dir:%.c=%.o)

Struts2系列:通配符和动态方法调用