耙删除文件任务

时间:2012-01-10 23:49:00

标签: ruby msbuild rake

在msbuild中,我可以删除某些目录中的部分文件,如

<ItemGroup>
     <FilesToDelete Include="$(DeploymentDir)\**\*" exclude="$(DeploymentDir)\**\*.log"/>
</ItemGroup>
<Delete Files="@(FilesToDelete)" />

它将删除除* .txt

以外的所有文件

有些rake任务我可以类似吗?

2 个答案:

答案 0 :(得分:11)

Ruby内置了类以简化:

Dir['deployment_dir/**/*'].delete_if { |f| f.end_with?('.txt') }

然而,对于一些内置任务,rake有这方面的帮助。改编自API docs,您可以选择如下文件:

files_to_delete = FileList.new('deployment_dir/**/*') do |fl|
  fl.exclude('*.txt')
end

然后您可以将其提供给删除任务。

更好的是,您可以使用内置的CLEAN / CLOBBER任务:

# Your rake file:
require 'rake/clean'

# [] is alias for .new(), and we can chain .exclude
CLEAN = FileList['deployment_dir/**/*'].exclude('*.txt')

然后你可以在cmd线上说:

rake clean

阅读tutorial

答案 1 :(得分:1)

@adzdavies的回答很好,但是由于CLEAN是一个常量,因此分配给CLEAN会产生以下警告:

warning: already initialized constant CLEAN

您应该改用CLEAN的实例方法。它是Rake::FileList,因此您可以在Rakefile中添加以下内容:

require 'rake/clean'

# this is untested, but you get the idea
CLEAN.include('deployment_dir/**/*').exclude('*.txt')

然后运行:

rake clean