我需要检查目录中是否存在文件。文件名有类似的模式:perl中与-e和正则表达式匹配的文件名
/d1/d2/d3/abcd_12345_67890.dat
在我的计划,我会知道文件名多达abcd_
我需要编写使用-e
选项的if
条件,找到匹配上面给出的图案文件。
我需要检查目录中是否存在文件。文件名有类似的模式:perl中与-e和正则表达式匹配的文件名
/d1/d2/d3/abcd_12345_67890.dat
在我的计划,我会知道文件名多达abcd_
我需要编写使用-e
选项的if
条件,找到匹配上面给出的图案文件。
如果我正确理解你的问题,你想检查文件是否存在,并且文件名具有特定的格式。如果这是你想要的,你可以这样做:
use File::Basename;
$file = "/d1/d2/d3/abcd_12345_67890.dat";
print "SUCCESS" if(-e $file and (basename($file)=~m{^abcd_}))
根据现在的问题(由您编辑?),Venkat不知道整个文件名,只是前5个字符。这似乎并没有解决他的问题。 – jimtut 2010-02-08 17:18:04
如何
foreach $f (</d1/d2/d3/*.dat>) {if ($f =~ /\w{4}_\d{5}_\d{5}\.dat/) {print $f}};
带*的尖括号只是glob的语法糖。明确的做法更清洁。 – jmanning2k 2010-02-08 16:07:02
你有一点的XY问题在这里:http://www.perlmonks.org/index.pl?node_id=542341。解释使用你需要完成的事情,而不是你认为你必须这样做。你为什么需要用-e写一个if条件?你是否认为你需要这样做?如果你只知道部分文件名,你怎么知道你想要的文件名?最后需要回答什么? – 2010-02-08 21:05:58