如果文件存在通配符?
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 (<>)
有点特别:<>
从启动时提交给程序的文件中读取行。因此,如果您说script.pl file1 file2
,那么while (<>)
程序中的script.pl
将从file1
和file2
依次读取行。不是你想要的。 (一旦你opendir
然后你就可以按照暴民的回答显示。)
(更准确地说,<>
打开名称在@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";
【讨论】:
以上是关于如果文件存在通配符?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Erlang 中使用通配符 * 检查文件是不是存在?