Как удалить dirset каталогов с помощью Ant?

Я хочу удалить все каталоги и подкаталоги в корневом каталоге, которые содержат "tmp" в своих именах. Сюда также должны входить любые .svn файлы. Мое первое предположение - использовать

<delete>
    <dirset dir="${root}">
          <include name="**/*tmp*" />
    </dirset>
</delete>

Это не работает, поскольку вы не можете вставить dirset в тег delete.

Правильно ли это, или я должен делать что-то еще?

  • ant версия == 1.6.5.
  • версия java == 1.6.0_04

Ответы

Ответ 1

Вот ответ, который сработал у меня:

<delete includeemptydirs="true">
    <fileset dir="${root}" defaultexcludes="false">
       <include name="**/*tmp*/**" />
    </fileset>
</delete>

У меня появилось дополнительное осложнение, которое мне понадобилось для удаления каталогов .svn. С defaultexcludes, файлы .* были исключены, поэтому пустые каталоги не были действительно пустыми и поэтому не удалялись.

Атрибут includeemptydirs (спасибо, flicken, XL-Plüschhase) позволяет подстановочному шаблону ** соответствовать пустой строке.

Ответ 2

попробовать:

<delete includeemptydirs="true">
    <fileset dir="${root}">
          <include name="**/*tmp*/*" />
    </fileset>
</delete>

Спасибо, Флик!

Ответ 3

Я просто хотел добавить, что часть решения, которая работала для меня, добавляла /** в конец пути include. Я попробовал следующее, чтобы удалить каталоги Eclipse.settings:

<delete includeemptydirs="true">
    <fileset dir="${basedir}" includes"**/.settings">
</delete>

но это не сработало, пока я не изменил его на следующее:

<delete includeemptydirs="true">
    <fileset dir="${basedir}" includes"**/.settings/**">
</delete>

По какой-то причине добавление /** к пути удаляет файлы в соответствующем каталоге, все файлы во всех подкаталогах, подкаталогах и соответствующих каталогах. Добавление /* удаляет только файлы в соответствующем каталоге, но не удаляет соответствующий каталог.