Грабли удалить файлы задача - PullRequest
3 голосов
/ 11 января 2012

В msbuild я могу удалить часть файлов в определенном каталоге, например:

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

Он удалит все файлы, кроме * .txt

Есть ли какая-нибудь рейк-задача, которую я могу выполнить аналогичным образом?

Ответы [ 2 ]

11 голосов
/ 11 января 2012

Ruby имеет встроенные классы, чтобы упростить это:

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

Однако для некоторых встроенных задач в rake есть помощники для этого. Адаптированный из API документов вы можете выбирать файлы следующим образом:

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

Прочтите учебник .

1 голос
/ 28 сентября 2018
Ответ

@ adzdavies хорош, но присвоение CLEAN вызовет следующее предупреждение, поскольку CLEAN является константой:

warning: already initialized constant CLEAN

Вместо этого следует использовать * * методы экземпляра *Это Rake :: FileList , так что вы можете добавить что-то подобное в свой Rakefile:

require 'rake/clean'

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

Затем запустите:

rake clean
...