我需要检查目录中是否存在文件。文件名的格式如下:
/d1/d2/d3/abcd_12345_67890.dat
在我的程序中,我将知道文件名最多为abcd_
我需要使用if
选项编写-e
条件,并找到与给定模式匹配的文件。
答案 0 :(得分:11)
答案 1 :(得分:3)
您不能将-e
用于部分文件名匹配。
use File::Basename;
use File::Slurp;
my ($name, $path) = basename('/d1/d2/d3/abcd_');
my $exists = grep { /^\Q$name\E_[0-9]{5}_[0-9]{5}\.dat\z/ } read_dir $path;
如果目录包含大量文件,您仍然可以使用opendir并在while循环中使用readdir来保持程序的足迹不变。
我在这里使用File::Slurp::read_dir
来呈现一个整洁的解决方案。
答案 2 :(得分:2)
如果我正确理解您的问题,您需要检查文件是否存在且文件名是否具有特定格式。如果这是你想要的,你可以这样做:
use File::Basename;
$file = "/d1/d2/d3/abcd_12345_67890.dat";
print "SUCCESS" if(-e $file and (basename($file)=~m{^abcd_}))
答案 3 :(得分:0)
怎么样
foreach $f (</d1/d2/d3/*.dat>) {if ($f =~ /\w{4}_\d{5}_\d{5}\.dat/) {print $f}};