perl - 如果文件存在通配符?
问题描述
我需要验证文件是否存在,但文件名发生了变化。由于附加时间(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";
}
}
解决方案
看起来您正在尝试使用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";
}
推荐阅读
- python - 用 NaN 替换 'UN' 表示的值
- javascript - 角度动态表单添加嵌套表单数组
- python - 如何在 OpenCV for Python 中使用 OpenCL?
- local-storage - 读取 key 为对象的 localstorage
- android - 在 Wear 应用中创建的通知不会显示在 Android 智能手表上
- c++ - Winsock两次发送消息c ++
- python - 使用 Python 或 NodeJS 读取 blk00000.dat 文件的库
- php - 使用 PHP MVC 模式找不到 Ajax 的新追加
- sql - 在聚合中选择没有分组依据的列
- c# - 将 Owin / Katana 与 ASP.NET Core(实际用例)一起使用是否仍然相关?