Groovy中的正则表达式目录匹配

时间:2017-02-13 13:58:07

标签: gradle groovy

作为Gradle删除任务的一部分,我想从目录中删除所有以CSW开头并以.tar.gz结尾的tar文件。我怎样才能用Groovy实现它?

我尝试过类似下面的内容:

delete (file('delivery/').eachDirMatch(~/^CSW$.*.gz/))

但它不起作用。我如何在Groovy中使用正则表达式。与shell相比,它类似于rm -rf CSW*.tar.gz

1 个答案:

答案 0 :(得分:2)

当你在问题中提到gradle时,我会用gradle解决方案回答。有点像:

myTask(type: Delete)  {
  delete fileTree(dir: 'delivery' , include: '**/CSW*.tar.gz')
}

其中delete方法调用是配置时间,并在任务最终运行时配置将被删除的内容。有关详细信息,可能值得查看gradle docs on the fileTree method

如果你需要保持纯粹的常规,你可以采取以下措施:

new AntBuilder().fileScanner {
  fileset(dir: 'delivery', includes: '**/CSW*.tar.gz')
}.each { File f -> 
  f.delete()
}

如果此代码存在于gradle脚本中,我建议坚持使用选项1,因为它保留了gradle最新检查并且非常适合gradle configuration vs execution time pattern

如果你真的想要使用正则表达式而不是上面的样式模式,那么你肯定可以做到这一点,尽管根据你的要求,我个人不会看到很多重点。