我需要檢查目錄中是否存在文件。文件名有類似的模式: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