我正在创建一些用于删除备份文件的shell。我使用关键字' bkp'来创建原始文件的备份。它可以是文件名中的任何一个,如 [" abc.bkp.ctp"," abc-bkp.ctp",abc_bkp.ctp",&#34 ; bkp_abc.ctp"] 即可。我的意思是任何方式。我希望使用shell删除所有文件。我正在使用Cakephp的文件N文件夹类" http://book.cakephp.org/2.0/en/core-utility-libraries/file-folder.html"。我如何编写正则表达式来搜索这些文件。
我的shell逻辑是什么。
public function removeBkp() {
$path = BASE_PATH . DS . APP_DIR . DS;
$count = 0;
$this->out("", 2);
$this->out("-------------------------------------", 1);
$this->out("Path : " . $path, 1);
$this->out("FILES DETAILS", 1);
$this->out("-------------------------------------", 2);
$dir = new Folder($path);
// Need to seach bkp files here
$defaultFiles = $dir->findRecursive("(bkp)");
$results = $defaultFiles;
if ($results == null || empty($results)) {
$this->out("No file to delete.", 3);
} else {
foreach ($results as $file) {
// unlink($file);
$this->out("File removed - " . $file, 1);
$count++;
}
$this->out("Total files: " . count($results), 1);
}
}
答案 0 :(得分:1)
您可以将所有文件名与此正则表达式匹配:
([\w._-]*bkp[\S]*?\.ctp)
假设只使用._-
来分割文件,您可能需要向该字符类添加更多内容。
此正则表达式还假定文件始终以ctp结尾。
演示:https://regex101.com/r/tB9nM9/1
编辑:如果您希望匹配任何扩展程序,可以使用\w{3}
概括扩展程序。如果长度为3,则可以根据需要在此处添加方差,但更具体的通常更好。
([\w._-]*bkp[\S]*\.\w{3})